(i)= 1在标准C中是否非法?

问题描述 投票:2回答:1

我正在编写一个跟随this standard的C编译器,如果我解析这样的语句:

int i;
(i) = 1;

我的编译器将报告一个错误,指出(i)是一个右值,不应分配。

我检查了代码和规则,发现了:在赋值表达语义中:

赋值运算符的左值应为可修改的左值操作数。

赋值表达式在分配,但不是左值。

就我而言,有两个赋值表达式:括号中的(i) = 1i。因此(i)应该是一个右值。

所以我的问题是:是(i) = 1在此C标准中非法吗?

c language-lawyer variable-assignment rvalue lvalue-to-rvalue
1个回答
1
投票

引用n1570(最新的C11标准草案):

6.5.1主要表达式(强调我的意思)

5带括号的表达式是主要表达式。 其类型和值与非括号表达式相同。如果是,则它是一个左值,一个函数指示符或一个空表达式。非括号表达式分别是一个左值,一个函数指示符或无效表达式。

[i是一个左值,因此根据以上内容,(i)也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.