问题描述
按预期,对于以下程序,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
解决方法
在C中,宏false
定义为:
#define false 0
因此,您正在将指针与0(一个有效的空指针常量)进行比较。