gpt4 book ai didi

c - 是否保证解析为 "(a ? b : (c ? d : e))"?

转载 作者:行者123 更新时间:2023-12-01 14:19:45 25 4
gpt4 key购买 nike

假设,如果我像这样使用三元运算符:a ?乙:丙? 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;
}

GccClang 给出输出 2

问题:

  • 是否保证解析为 (a ? b : (c ? d : e))?或
  • 这是未指明的行为吗?
  • C 标准对此有何规定?

最佳答案

三元运算符的语法,也称为条件表达式,在C standard 的第6.5.15 节中定义。如下:

conditional-expression:

logical-OR-expression
logical-OR-expression ? expression : conditional-expression

因为“条件表达式”不是“逻辑或表达式”(阅读:逻辑或运算符具有更高的优先级)这会阻止 a ?乙:丙? d : e 被解析为 (a ? b : c) ? d : e。这也意味着运算符与自身是从右到左关联的。因此它被解析为 a ? b : (c ? d : e).

更多详细信息,您可以找到运算符优先级规则here .虽然标准是权威来源,但此表以更易于理解的方式列出了规则。

由于人们可能难以记住整套优先规则,并且由于不同的语言有时具有不同的优先规则,因此最好明确说明操作顺序并使用括号使您的意图更清楚读者。

关于c - 是否保证解析为 "(a ? b : (c ? d : e))"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com