C如何用2个操作数评估2个缺点?

Sma*_*sal 1 c compiler-errors

考虑:

    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.


所有帮助表示赞赏.

cHa*_*Hao 7

C有一个拼写的一元减量运算符--,以及一个"最大的munch规则",它使得它识别运算符而不是减号和负号,即使后者更有意义.对于大约六个伴随的原因,3 -- 3没有意义,你得到一个错误.

如果你说过a = -3 - -3;,而不是像你的空格键一样把所有东西塞进去,你就没事了.:两个运算符之间的PA空间使C看不到--.

  • @SmarthBansal,输入序列的标记化发生在处理的早期阶段,其中对于上下文一无所知. (2认同)