问我的供应商提供的头文件#define NULL为0L。这是为什么?
答有些程序会不加思索地尝试通过宏生成空指针,不带强制类型转换,在非指针的上下文中。(这样做不能保证一定能正常工作;参见问题 5.2 和 5.11。)在指针大于整数的机器上(例如“大”模式下的 PC 兼容机;另参见问题 5.17),NULL例如NULL这样的定义0L可以帮助这些不正确的程序工作。(0L是一个完全有效的定义NULL;它是一个“值为 0 的整数常量表达式。”)是否应该迁就那些不正确的程序是有争议的;另参见问题 5.6 和第 17 章。
参考文献:Rationale 第 4.1.5 节
H&S 第 5.3.2 节 pp. 121-2