Hat*_*ate 12 c c++ qt c-preprocessor
在qt文档中找到这个.有什么区别
#if defined(Foo) && Foo == 0
Run Code Online (Sandbox Code Playgroud)
和
#if Foo - 0 == 0
Run Code Online (Sandbox Code Playgroud)
据我所知,如果Foo未定义,后者也将是假的?我在哪里可以读到这个?
AnT*_*AnT 20
如果Foo未定义,则后者将转换为
#if 0 - 0 == 0
Run Code Online (Sandbox Code Playgroud)
这是真的,不是假的.请记住,在#if所有未定义的标识符下都会被文字替换0(defined()当然,一旦评估了所有运算符).这甚至适用于匹配语言关键字的预处理令牌.在C语言中,所有关键字都0在此上下文中被替换.在C++关键字中true,false免除替换,而所有其他关键字都被替换.
(顺便说一句,这意味着在C true中将被悄悄地替换为0if <stdbool.h>不包括在内,并且包含1if <stdbool.h>.)
与此同时
#if defined(Foo) && Foo == 0
Run Code Online (Sandbox Code Playgroud)
Foo未定义时为false .所以,这是你的不同之处.
Qt文档确实似乎表明前者与后者相同.我不知道为什么他们这样做,因为他们肯定不相同.它似乎是Qt文档中的错误.