为什么 n++==--n 总是等于 1?
Why n++==--n always equal to 1?
为什么n++==--n
总是等于1?以下代码给出的输出为 1.
#include <stdio.h>
int main(){
int n=10;
printf("%d\n",n++==--n);
}
不管n
是什么,输出总是1。
如果用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
有副本
(重要信息:始终在打开编译器警告的情况下编译代码,但是 尤其是 如果您看到可能出现意外行为。)
为什么n++==--n
总是等于1?以下代码给出的输出为 1.
#include <stdio.h>
int main(){
int n=10;
printf("%d\n",n++==--n);
}
不管n
是什么,输出总是1。
如果用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
有副本(重要信息:始终在打开编译器警告的情况下编译代码,但是 尤其是 如果您看到可能出现意外行为。)