【发布时间】:2021-03-29 02:03:45
【问题描述】:
我用的是C语言,代码如下:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int num1=0;
int res = ++num1 && num1++;
printf("%d\t%d\n",num1,res);
}
在上面的代码中,我得到的输出为2 1。我认为输出应该是2 0。
如有错误请指正,为了解决这个语句,num1++(0) 将由于最高优先级而首先执行,然后 ++num1(2) 将被执行,最后 && 将被执行,因为它具有最低优先级。
请评论这条语句是如何执行的。
在一些教程中,我发现后缀 ++ 和前缀 ++ 具有相同的优先级,但如果这是真的,那么根据关联性规则再次 num1++ 应该首先执行(从右到左),这应该再次导致回答为2 0。
【问题讨论】:
-
&&是一个序列点。从Wikipedia开始保证之前评估的所有副作用都已执行,并且后续评估的副作用尚未执行。评价从左到右。 -
即使 if 第二部分
num1++(如你所料)首先被评估,这将评估为0和短电路规则会说,因为整个表达式不能是true,所以其他(第一)部分不会被评估,所以num1不能像你想象的那样是2。
标签: c operators operator-precedence sequence-points logical-and