为什么n++==--n总是等于1?[重复]

问题描述 投票:-1回答:1

为什么?n++==--n 总是等于1?以下代码给出的输出为1。

#include <stdio.h>
int main(){
    int n=10;
    printf("%d\n",n++==--n);
}

输出总是1,不管是什么 n 是。

c post-increment pre-increment
1个回答
3
投票

如果用 gcc -Wall,得到以下警告。

a.c: In function ‘main’:
a.c:4:20: warning: operation on ‘n’ may be undefined [-Wsequence-point]
     printf("%d\n",n++==--n);
                   ~^~

有一个很好的解释在... gcc manpage中关于这个问题的内容,也就是开头的那一节。

       -Wsequence-point
           Warn about code that may have undefined semantics because of violations of sequence
           point rules in the C and C++ standards.

[...etc...]

值得一读,因为它更详细地讨论了这些问题,尽管基本观点是,结果取决于操作的顺序,而操作的顺序并不完全受标准的限制,因此没有定义。

为了遵守GFDL的规定,我可能无法在这里完整地转载它,否则就会添加很多许可信息。有一个副本在 https:/gcc.gnu.orgonlinedocsgcc-3.3.6gccWarning-Options.html。

(带回家的信息:总是在编译器警告开启的情况下编译你的代码,但是 尤其是 如果你看到的可能是意外的行为。)

© www.soinside.com 2019 - 2024. All rights reserved.