klu*_*utt 4 c operator-precedence
我正在看此页面:https : //en.cppreference.com/w/c/language/operator_precedence
引起我注意的是,括号运算符的唯一描述是函数调用。这是否意味着该表达式x = a * (b+c)-(d*e)具有两个函数调用?
括号可以用作函数调用运算符,但这并不是它们唯一的用途。如您的示例一样,它们也用于表达式分组。
您正在寻找的是C标准的 6.5.1节,其中讨论了主表达式:
句法
1个
Run Code Online (Sandbox Code Playgroud)primary-expression: identifier constant string-literal ( expression ) generic-selection...
5带 括号的表达式是主要表达式。 它的类型和值与非括号表达式相同。如果未加括号的表达式分别是一个左值,一个函数标记或一个空表达式,则它是一个左值,一个函数标记或一个空表达式。
如上所述,括号可用于对表达式进行分组。
在6.5.2节“后缀表达式”中详细介绍了用作函数调用运算符的方法:
Run Code Online (Sandbox Code Playgroud)postfix-expression: ... postfix-expression(argument-expression-list opt) ...
因此,在您的表情中:
x = a * (b+c)-(d*e)
Run Code Online (Sandbox Code Playgroud)
此处使用括号匹配主表达式,但不匹配后缀表达式。
此外,除了表达式分组外,在语言语法的其他部分也使用了括号。关于选择语句的第6.8.4节在if和switch语句的语法中使用括号:
- if(表达式)语句
- if(表达式)语句 else 语句
- switch(表达式)语句
关于迭代语句的第6.8.5节在while和for语句的语法中也使用括号。
- while(表达式)语句
- 在(expression)时做陈述 ;
- for(表达式opt ; 表达式opt ; 表达式opt)语句
- for(声明 expression opt ; expression opt)语句