假设,如果我使用这样的三元运算符:a ? b : c ? d : e
代码:
#include <stdio.h>
int main()
{
int a=1,b=2,c=3,d=4,e=5;
printf("%d\n", a ? b : c ? d : e);
return 0;
}
Gcc 和 Clang 提供输出2
。
问题:
(a ? b : (c ? d : e))
?或答案 0 :(得分:7)
三元运算符的语法,也称为条件表达式,在C standard的6.5.15节中定义如下:
条件表达式:
逻辑OR-表达
逻辑OR表达?表达式:条件表达式
因为“condition-expression”不是“逻辑OR表达式”(读取:逻辑OR运算符具有更高的优先级),这会阻止a ? b : c ? d : e
被解析为(a ? b : c) ? d : e
。这也意味着操作员从右到左与自身相关联。因此它被解析为a ? b : (c ? d : e)
。
有关详细信息,您可以找到运算符优先级规则here。虽然标准是权威来源,但此表以更容易理解的方式列出规则。
由于人们很难记住完整的优先规则,并且因为不同的语言有时会有不同的优先规则,所以最好明确操作的顺序,并使用括号使你的意图更清晰。读者。