c - C 编译器 GCC 和 Turbo 的奇怪行为

标签 c gcc turbo-c

<分区>

我已经回答了其他类似的问题,但试图了解我所面临的情况。

所以,这是我的两行 C 代码。

int i=0;
printf("%d %d %d %d %d",i++,i--,++i,--i,i);

这是我从 GCC 和 Turbo C 编译器获得的输出。

海合会

输出:

-1 0 0 0 0

涡轮C

输出:

-1 0 0 -1 0

我用预递增运算符分别尝试了各种实验,两个编译器的工作方式相似,但是当我使用上面的 printf 语句时,输出不同。

我知道 Turbo C 是一个古老的编译器,现在已经过时且非标准,但仍然不知道上面的代码有什么问题。

最佳答案

这是未定义的行为,您在没有序列点的情况下多次读取和修改 i。 (函数参数列表中的不是序列点,函数参数的求值顺序也没有定义。)

在这种情况下,编译器可以输出它想要的任何内容。不要那样做。

通过在本网站搜索 [C] undefined behavior 来查找大量其他类似问题.这很有启发性。

关于c - C 编译器 GCC 和 Turbo 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6067722/

相关文章:

c - 用 C 语言复制 Spinrite 动画效果

c - 数组到链表 C

linux - 为什么ld需要/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2,而它的默认动态链接器是/lib64/ld-linux-x86-64.so.2?

无法交叉编译(windows)链接ssl库的程序

c++ - GCC 中默认参数段错误的 std::map 参数和空括号初始化器

c - 链接器错误 undefined symbol _log10f

无法运行 c 图形程序

c - 如何在 TurboC 中启用链接浮点库?

c - 为什么我的 char 数组的第一个值是 10?

c - 出现段错误但看不到错误?