c++ - 为什么编译不会失败?
问题描述
正如预期的那样,对于以下程序,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 进行比较,0 是一个有效的空指针常量。
推荐阅读
- google-data-studio - JavaScript,找到对象数组中的最小值
- java - 如何通过传递打开文件的路径在 GUI 中使用堆栈进行 close()
- c++ - C++ 避免向下转换
- angular - 在angular8中使用带有模板引用的viewchild时无法读取未定义的属性样式
- ios - 用空字符串替换字典数组中的 NSNull 值
- swift - Swift 5.1 @propertyWrapper - 在初始化所有存储的属性之前在属性访问中使用“自我”
- c - 如何在 C 中创建一个空链表?
- html - 确定 Django 是否正在缓存我的 HTML 内容
- javascript - 确定文件是否已经导入或不在反应中
- r - R:在 3D 中绘制平面