我在学习C语言的语法:http://www.quut.com/c/ANSI-C-grammar-y-1999.html#unary-expression
assignment_expression
: conditional_expression
| unary_expression assignment_operator assignment_expression
;
和
unary_expression
: postfix_expression
| INC_OP unary_expression
| DEC_OP unary_expression
| unary_operator cast_expression
| SIZEOF unary_expression
| SIZEOF '(' type_name ')'
;
那么为什么我们不能这样做呢:
++v = 3<4 ? 10 : 2;
发布于 2019-04-08 08:56:35
语言语法只是语言定义的一部分。还有一些额外的语义规则和约束,它们指定了语法本身无法指定的内容。例如,语法本身不能指定变量和函数必须在使用前声明,或者一元*
运算符的操作数必须具有指针类型,等等。
对赋值表达式的约束是赋值的目标必须是可修改的左值,该左值是指定存储器区域使得该区域的内容可以被读取或更新的表达式。如果v
是一个变量的名称,那么它也是一个左值。
但是,++
运算符的语义规则规定,++v
的结果不是左值,因此不能作为赋值的目标。
有关这一切的章节和章节,请参阅C 2011 online draft,6.3.2.1节(L值、数组和函数指示符)、6.5.3节(一元运算符)和6.5.16节(赋值运算符)。
https://stackoverflow.com/questions/55561604
复制相似问题