C将如何解析这句话?
根据C语言官方的描述,会返回什么数字呢?
int a, b;
a = 5;
b = a+++++a;
return b;
According to the official description of the C language, what number will be returned?
int a, b;
a = 5;
b = a+++++a;
return b;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它被解析为:
这是一个无效的表达式。增量运算符不能应用两次,因为
(a++)
不是左值。分词器无法识别上下文,并且会匹配尽可能长的标记,因此它不会被解析为语法上有效的
a++ + ++a
。 (不过,这仍然是无效代码,因为它修改了a
两次,而没有调用未定义行为的序列点。)It is parsed as:
This is an invalid expression. The increment operator can't be applied twice as
(a++)
isn't an lvalue.The tokenizer isn't context-aware and will match the longest token possible, so it is not parsed as the syntactically valid
a++ + ++a
. (That still would be invalid code, though, since it modifiesa
twice without a sequence point which invokes undefined behavior.)