考虑:
int a;
a = -3--3;
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)
第二行(a = -3--3)产生编译时错误.
添加一对额外的括号如下:
int a;
a = -3 - (-3);
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)
错误消失了.
由于括号删除了错误,我相信一些歧义必定导致它.
但我不明白为什么编译器会混淆.我尝试减去-3从-3.
所有帮助表示赞赏.
C有一个拼写的一元减量运算符--,以及一个"最大的munch规则",它使得它识别运算符而不是减号和负号,即使后者更有意义.对于大约六个伴随的原因,3 -- 3没有意义,你得到一个错误.
如果你说过a = -3 - -3;,而不是像你的空格键一样把所有东西塞进去,你就没事了.:两个运算符之间的PA空间使C看不到--.