Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么编译器要按照下面代码中的优先规则编译?_C - Fatal编程技术网

C 为什么编译器要按照下面代码中的优先规则编译?

C 为什么编译器要按照下面代码中的优先规则编译?,c,C,根据,赋值运算符在其他运算符中的优先级最低(逗号之前) 但是,当我们执行下面的代码时,它会打印3 int main() { int a=10,b=6,c=7; if (b%=(a%=b) * c >= 3 * c-b) printf ("1"); else if (a ? b : c == 0) printf ("2"); else if (c = c || a&&b) printf ("

根据,赋值运算符在其他运算符中的优先级最低(逗号之前)

但是,当我们执行下面的代码时,它会打印
3

int main()
{
    int a=10,b=6,c=7;
    if (b%=(a%=b) * c >= 3 * c-b) 
        printf ("1");
    else if (a ? b : c == 0) 
        printf ("2");
    else if (c = c || a&&b) 
        printf ("3");
    else if (!c || printf ("4")) 
        printf("4");
}
我要说的是,它应该打印
1
,因为
a%=b
将首先编译(因为它有括号),然后编译器将执行
a*c
,最后它将与表达式
(3*c-b)
进行比较,即
3*7-6=15
。由于
a*c=4*7=28
28>=15
为真,因此输出为
1

比方说,即使第一个if为假,为什么第二个if为假<由于第一个
if
a
4
b
现在是
28
,编译器将返回三元数的“true”部分,即
b
,因为
b
不是
0
;如果,则第二个
为真

28>=15为真,则输出为1

是,然后
b%=1
为0,因此
if
为false

它是:


非常感谢,我意识到我在自相矛盾!评论不用于扩展讨论;这段对话已经结束。
b %= ((a%=b) * c >= 3 * c-b) =
... =
b %=             1           =
0