在qt documentation中找到它。 是什么“#if Foo - 0 == 0”和“#if defined(Foo)&& Foo == 0”之间的区别是什么?
#if defined(Foo) && Foo == 0
和
#if Foo - 0 == 0
之间的差别,据我了解,后者也将是错误的,如果foo是不确定的?我在哪里可以读到这个?
在qt documentation中找到它。 是什么“#if Foo - 0 == 0”和“#if defined(Foo)&& Foo == 0”之间的区别是什么?
#if defined(Foo) && Foo == 0
和
#if Foo - 0 == 0
之间的差别,据我了解,后者也将是错误的,如果foo是不确定的?我在哪里可以读到这个?
如果Foo
是不确定的,那么后者将转化为
#if 0 - 0 == 0
这是真正,不是假的。请记住,在#if
下,所有未定义的标识符将被替换为文字0
(当然,所有defined()
运算符都会被评估)。这甚至适用于与语言关键字匹配的预处理令牌。在C语言中,在此上下文中,所有关键字均被0
取代。在C++关键字true
和false
免除替换,而所有其他关键字被替换。
(顺便说一句,这意味着,在C true
将静静地替换为0
如果<stdbool.h>
不包含,并用1
如果<stdbool.h>
是包括在内。)
同时
#if defined(Foo) && Foo == 0
为假时Foo
未定义。所以,这是你的区别。
Qt文档的确似乎表明前者与后者相同。我不知道他们为什么那样做,因为他们当然不是等同的。这似乎是在Qt文档中的错误。符== 0和Foo之间
差异 - 0 == 0是在前者中,富必须用值来定义:
#define Foo 0
并且不能是:
#define Foo // Foo == 0 would give an error, cannot evaluate Foo
虽然
#if defined(Foo) && Foo == 0
: - 在富的情况下0 == 0,富可以不用值
所以被定义
表示Foo定义并且它有一个值(在这种情况下为0)。
和:
#if Foo - 0 == 0
手段foo是无论是在第一种情况下与0中定义或不具有值来定义,但由于它不具有定义的(富)等,富未定义将适用,以及。
所以Qt文档有错误!'因为从他们的解释出来,这两个是相等的 – Hate
+ 1所有未定义的标识符被替换为字面值0 – billz
@billz和AndreyT可以与我分享一些关于C++中的宏的链接或建议文章?因为我发现的关于它们的只是他们的列表和简要描述,但我当然没有阅读过任何地方,比如“所有未定义的标识符被替换为0”。 – Hate