为什么编译不会失败?

时间:2020-11-06 03:52:29

标签: c++ c compiler-errors compiler-warnings

按预期,对于以下程序,C / C ++编译确实会失败,并显示“警告:指针与整数之间的比较”:

#include <stdbool.h>
int main(void) { return (int*)42 == true; }

但是,当true文字更改为false时,编译不会失败。为什么?

  • 已确认:clang-1100.0.33.12,gcc 7.5.0
  • 无法确认:g ++ 7.5.0

1 个答案:

答案 0 :(得分:6)

在C中,宏false定义为:

#define false   0

因此,您正在将指针与0(一个有效的空指针常量)进行比较。