C主表达式-是否是主表达式?
作者:互联网
>为什么将它们称为“主要”?按照评估顺序,他们是第一位?
> C 03标准在第5章(注释1)中定义了表达式:
An expression is a sequence of operators and operands that specifies a computation.
然后5.1“主表达式”定义主表达式的列表:
(1)主表达式:
literal
this
( expression )
id-expression
我的主要问题是关于第三点:
( expression )
因此,根据标准,每个带有方括号的表达式都是主要表达式,并且首先对其进行计算.它看起来很合理,并给出了C表达式中括号的行为的准确解释(优先级).
所以这意味着
(variable + 10)
是主要表达.
var = (variable + 10) * 3
根据我的理论,它看起来很合理,但是我知道其他来源
(variable + 10)
不是主要表达,但为什么呢?我不明白,但是标准将(表达式)定义为主要表达式.
请帮我,因为我做不到.非常感谢您,我的英语不好对不起.
你好.
解决方法:
C表达式可能很复杂,也就是说,它们可以由嵌套表达式组成,并通过使用运算符进行组合,而这些嵌套表达式可能又很复杂.
如果将复杂的表达式分解为更小的单位,在某些时候,您将剩下原子单位,因为它们无法进一步分解.这些是主要表达;它们包括标识符,文字,关键字this和lambda表达式.
但是,确实存在C标准定义为主要的一种非原子构造:包含在圆括号中的表达式(又称为括号).因此,您给出的(变量10)示例是一个主表达式(子表达式变量(它是一个标识符))和10(变量是一个文字).
我认为标准将它们列为主要表达式是因为它们在评估顺序方面起着真正原子表达式的作用:必须对方括号中的所有内容进行评估,以使支持的表达式的值可以与其他表达式一起进入评估:在(5 10)* a中,必须对5 10的值进行评估,然后才能进入* a的评估. [注意,这并不意味着在对表达式a求值之前先对5 10求值.这仅意味着必须对5 10进行求值,然后才能对乘法本身求值.]
因此,从这个意义上讲,带括号的子表达式就像原子的一样.
我想这就是为什么标准对此概念不使用术语“原子表达”的原因.它们的行为就好像它们是原子的一样,但是至少括起来的变体实际上不是原子的.在我看来,“主要”似乎是一个不错的选择.
标签:c,expression,standards 来源: https://codeday.me/bug/20191011/1889585.html