为什么n ++ ==-n总是等于1?

时间:2020-06-04 05:48:51

标签: c post-increment pre-increment

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

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

无论n是什么,输出始终为1。

1 个答案:

答案 0 :(得分: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联机帮助页中有一个很好的解释,该节开始于:

       -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.org/onlinedocs/gcc-3.3.6/gcc/Warning-Options.html

有一个副本

(提示信息:始终在打开编译器警告的情况下编译代码,但尤其是,如果您看到可能出乎意料的行为。)