#include <stdio.h>
int main(void)
{
int a = 1, i = 3, x, y, z;
a = 1; i = 3;
x = a+++i;
a = 1; i = 3;
y = a++ + i;
a = 1; i = 3;
z = a + ++i;
printf("%d %d %d", x, y, z);
scanf(" ");
return 0;
}
此代码输出显示为4 4 5
。但为什么a+++i
等于a++ + i
?
是因为编译器总是从左到右阅读源代码?
或者是因为操作遵循the order of precedence?
它会在所有编译器上都一样吗?
答案 0 :(得分:5)
C11标准,部分6.4 (Lexical elements)/4
说(并且在C99中它是相同的):
如果输入流已被解析为预处理令牌,直到给定的字符,那么 下一个预处理令牌是可构成一个的最长字符序列 预处理令牌。
还有一个例子:
程序片段
x+++++y
被解析为x ++ ++ + y
,违反了约束条件 增量运算符,即使解析x ++ + ++ y
可能产生正确的表达式。
答案 1 :(得分:1)
我无法全部说明,因为C编译器的实现可能会有所不同。但通常是的,你是对的。 C编译器应该是贪婪的,即尽可能多地读取,因此+++
== ++ +
。