我有以下代码:
#include <stdio.h>
int main(int argc, char **argv) {
int i = 0;
(i+=10)+=10;
printf("i = %d\n", i);
return 0;
}
如果我尝试使用gcc将其编译为C源代码,则会收到错误消息:
error: lvalue required as left operand of assignment
但是,如果我使用g ++将其编译为C ++源代码,则在运行可执行文件时也不会出错:
i = 20
为什么会有不同的行为?
85
不同的语言,不同的语法规则?就个人而言,我会在代码审查中拒绝该代码。
—
Max
避免使用此类imo代码...每个人都不知道。
—
Allaire 2012年
毫无疑问,代码不是干净的,应避免在“实际”开发中使用。但是,尽管如此,我仍然观察到相同的行为,并想知道其原因。
—
ulidtko
这不是真实软件的代码摘录。这只是我偶然发现的一个纽结。
—
Svetlin Mladenov
@JohnDibling我认为投票表决特别是(i + = 10)+ = 10我不知道哪种语言是合法代码,而且他说C ++实际上可以编译它的事实引起了我的兴趣。
—
Tony318