这个C程序的解释

3

考虑64位

#include<stdio.h>

int main()

{

    unsigned a=0xffffffff;

    a=~a;

    printf("%u\n",a);

    printf("%x\n",+  +  a);
    return 0;

}
OUTPUT:
0
0

在执行 "a" 后, "a" 变为 0。但是在 "+ + a" 语句中, "a" 没有递增。这是为什么呢?这里是否与空格有关或其他原因?我想要输出的解释。


5
是的,空格很重要,它们分隔了标记。++ 是一个标记, + + 则是两个。 - Daniel Fischer
是的,如果你的意思是 ++a,那你写错了。 - Lee Daniel Crocker
1
C语言标记使用“最大匹配”规则进行解析。匹配在空格处结束(除非空格是字面量的一部分)。 - Jens
@NatashaAlyshayaRubenko 成功的一些明智指南:https://www.kernel.org/doc/Documentation/CodingStyle - user529758
3
@NatashaAlyshayaRubenko 欢迎。阅读并采纳这些,它们是我目前使用过的最佳 C 代码风格。(好吧,其实是 Linus 的,不出所料...) - user529758
显示剩余11条评论
2个回答

7

+ + a被解释为一元运算符+应用两次,因此值保持不变。

+(+a)是编译器看到的内容,在这种情况下只是0。


6

我认为这里的两个加号都是作为一元运算符。"由于+和-都可以作为一元运算符",所以对"a"没有影响,它仍然是0。

如果是++a;,那么这是前缀递增运算符,"a"将变为1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接