定义你自己的 NULL 值不是标准的,而且很容易出错,而且在最好的情况下,这肯定会让你没有睡眠和头痛。
C 和 C++ 之间以及 C++ 98、C++0x 和 C++11中的NULL 值概念的问题并不新鲜,这就是为什么从 C++0x 开始引入nullptr宏以避免问题和协调一些事情。
但是,如果您使用继承自遗留 NULL 负担问题的代码:
根据您的配置、包含外部和库的顺序等,您可能需要确保按时定义 NULL。
最简单的方法是包含“stddef.h”,注意 stddef.h 的内容可能会根据您的系统/linux 风格而有很大差异,这是一个示例:
#ifndef _LINUX_STDDEF_H
#define _LINUX_STDDEF_H
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
例子:
我在尝试使用 i2c 库在 Raspberry-pi 上驱动 i2c 总线时遇到问题。在我的情况下,包括 i2c lib 是不够的,我必须创建一个 utils.h 文件来代替 i2c lib 标头:
#ifndef UTILS_H
#define UTILS_H
/// if you have to use i2c-dev.h then use this utils header instead of make sure to include stddef.h before.
/// otherwise you will end up with the following error:
/// .../arm-unknown-linux-gnueabi/arm-unknown-linux- gnueabi/sysroot/usr/include/linux/i2c-dev.h:175: error: 'NULL' undeclared (first use in this function)
/// return i2c_smbus_access(file,value,0,I2C_SMBUS_QUICK,NULL);
/// ^
#include <stddef.h>
#include <linux/i2c-dev.h>
#endif // UTILS_H