标准中提到f(a,(t=3,t+2),c);根据我的理解,这将是一个赋值表达式,后跟第二个运算符的表达式。
但语法将其并列列出:
表达:
赋值表达式
表达式、赋值表达式
工作草案,编程标准
C语言
++ 修订版 N4140(2014 年 11 月)
有人好心向我解释一下我在这里缺少什么吗?
当你看到
expression:
assignment-expression
expression, assignment-expression
这意味着有两种表达的可能性。一种可能性是,这只是assignment-expression
这是之前在某处定义的。或者递归地表示为expression, assignment-expression
因此,在扩展它之后,您会收到该表达式,它是一个或多个赋值表达式标记的逗号分隔列表。
在示例中,您提到的第二个参数是表达式 (t=3,t+2),它由 2 个逗号分隔的赋值表达式组成 - 因为它出现“在逗号被赋予特殊含义的上下文中”,所以它必须“仅出现在括号中”。
要找出为什么赋值表达式可以采用 t+2 的形式,您必须从它的定义返回并始终选择第一个选择
assignment-expression
-> conditional-expression
--> logical-or-expression
---> logical-and-expression
----> inclusive-or-expression
-----> exclusive-or-expression
------> and-expression
-------> equality-expression
--------> relational-expression
---------> shift-expression
----------> additive-expression - this is what you see
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)