小编Aar*_*ell的帖子

根据这个有趣的差异,C 声明实际上是如何解析的?

像这样组合声明和赋值是很常见的:

int beans = a * 2;
Run Code Online (Sandbox Code Playgroud)

或分开,像这样

int beans;
beans = a * 2;
Run Code Online (Sandbox Code Playgroud)

我目前的理解是bean可以被赋值,因为它是左值;它具有可写入的存储空间。右值a * 2无法分配给它,因为它只是一个带有值的表达式,没有存储空间。因此,这是允许的:

int beans;
(beans) = a * 2;
Run Code Online (Sandbox Code Playgroud)

事实上,任何作为左值的左操作数都应该有效。现在,这似乎表明int beans;是一个表达式,也是一个左值。但是,是不允许的:

(int beans) = a * 2;
Run Code Online (Sandbox Code Playgroud)

就 C 解析器的设计方式而言,这表明声明不仅仅是带有左值的表达式。这里发生了什么?

c parsing initialization assignment-operator language-lawyer

2
推荐指数
1
解决办法
100
查看次数