c - 先递增后乘法或先递增后乘法会发生什么?

标签 c

该程序的输出结果为 4.00000。 我不知道先将 2 与 c 相乘然后再进行增量,还是将 2 与增加的 c 相乘会发生什么?

int main()        
{
int c=1;
c=c+2*c++;
printf("\n%f", c);
return 0;
}

最佳答案

这会调用未定义的行为,这意味着您的程序中可能会发生任何事情。

请参阅 C99 规范,特别是J.2 未定义行为:

The behavior is undefined in the following circumstances: [...]

  • Between two sequence points, an object is modified more than once, or is modified and the prior value is read other than to determine the value to be stored (6.5).

根据经验,“两个序列点之间”是指结束语句的两个分号 (;) 之间。摘录中提到的“对象”是变量c

有了这个,我们可以清楚地看到对象在两个序列点之间被修改了两次。它在表达式 c++ 求值期间和赋值期间修改一次。

关于c - 先递增后乘法或先递增后乘法会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39127968/

相关文章:

c - cpu缓存访问时间分析

c - 为什么这个使用 fork() 和 wait() 的程序在我运行时输出 201?

c - gdb:给定一个地址,我能找到包含它的分配 block 吗?

c - msgrcv 的阻塞性质

c - 将 vector 解包为 C 中的变量

C 编程中无法获得正确的输入

c - 不打印句子中前三个单词的指针

c - 在 OpenCV 中使用直方图数据跟踪对象

c - 蓝牙通信延迟大

c char 数组到 uint8_t 数组