c - 有条件的? : expression, 后缀操作在什么时候发生?

标签 c

比如这两种说法的区别:

if ( ucNum++ >= 3 ) // ucNum incremented after comparing its value to 3, correct?
{
    ucNum = 0;
}

对比

ucNum++ >= 3 ? ucNum = 0 : 1; // does incrementing it happen somewhere in the middle of the inline?

也许它是特定于编译器的。它应该出现在条件表达式中的什么位置?

最佳答案

规则是先评估条件,然后再选择要评估的备选方案。由于评估的一部分是 ++,因此增量将发生在赋值之前(如果赋值发生的话)。

正如@caf 评论的那样,在控制表达式之后有一个序列点。因此,虽然(正如 David Thornley 指出的那样)表达式求值的顺序可以由编译器重新排列(特别是副作用求值),但重新排列不能跨越序列点。

关于c - 有条件的? : expression, 后缀操作在什么时候发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8217275/

相关文章:

c++ - C/C++、Windows 控制台应用程序的速度是否取决于目标是 32 位还是 64 位?

c - 如何使用 GCC 在每个函数的开头/结尾处植入我自己的代码

c - 在 systemd.Netstat 运行的网络服务器中调用 Accept() 后,不显示我的服务

c++ - C 中正确的指针算法

c - 为什么这个C程序会崩溃?编译得很好

c - 我如何像 "top"命令那样获取每个 CPU 的统计信息(系统、空闲、良好...)?

c - 使用本地时间 [ARDUINO] LED 无法打开

c - scanf() 将换行符保留在缓冲区中

c - LibAIFF 关闭文件 : Pointer being freed was not allocated occurs randomly

c++ - C/C++远程消息队列的推荐