我正在编写一个跟随this standard的C编译器,如果我解析这样的语句:
int i;
(i) = 1;
我的编译器将报告一个错误,指出(i)
是一个右值,不应分配。
我检查了代码和规则,发现了:在赋值表达语义中:
赋值运算符的左值应为可修改的左值操作数。
赋值表达式在分配,但不是左值。
就我而言,有两个赋值表达式:括号中的(i) = 1
和i
。因此(i)
应该是一个右值。
所以我的问题是:是(i) = 1
在此C标准中非法吗?
引用n1570(最新的C11标准草案):
6.5.1主要表达式(强调我的意思)
5带括号的表达式是主要表达式。 其类型和值与非括号表达式相同。如果是,则它是一个左值,一个函数指示符或一个空表达式。非括号表达式分别是一个左值,一个函数指示符或无效表达式。
[i
是一个左值,因此根据以上内容,(i)
也是如此。