我经历过其他类似的问题,但试图了解我所面临的情况.
所以,这是我的两行C代码.
int i=0;
printf("%d %d %d %d %d",i++,i--,++i,--i,i);
Run Code Online (Sandbox Code Playgroud)
以下是我从GCC和Turbo C编译器获得的输出.
输出:
-1 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
输出:
-1 0 0 -1 0
Run Code Online (Sandbox Code Playgroud)
我尝试了单独使用预增量运算符的各种实验,并且两个编译器的工作方式相似,但是当我使用上面的printf语句时,输出会有所不同.
我知道Turbo C是一个古老的编译器,现在已经过时和非标准,但仍无法弄清楚上面的代码有什么问题.
它是未定义的行为,您在i没有序列点的情况下多次读取和修改.(,函数参数列表中的不是序列点,也没有定义函数参数的求值顺序.)
编译器可以在这种情况下输出它想要的任何内容.不要那样做.
通过搜索此站点查找其他类似问题[C] undefined behavior.这很有启发性.
| 归档时间: |
|
| 查看次数: |
2100 次 |
| 最近记录: |