为何出现‘identifier NULL is undefined’错误?已包含<stdlib.h>仍报错
解决C语言中"identifier 'NULL' is undefined"错误的方法
这个问题我之前调试代码时也碰到过,虽然你已经引入了<stdlib.h>,但在一些严格的编译环境或者特定编译器配置下,NULL的定义可能没有被正确引入。下面给你几个实用的解决办法:
方法1:显式引入<stddef.h>头文件
C标准中,NULL的标准定义位置是<stddef.h>,虽然很多常用头文件(比如<stdlib.h>)会间接包含它,但某些场景下可能没生效。直接显式引入这个头文件,就能确保NULL被正确定义:
#include <stddef.h> #include <stdlib.h> // 你的其他代码
方法2:手动定义NULL
如果不想新增头文件,可以在代码最开头(所有#include之前)手动定义NULL,这完全符合C标准的规范:
#define NULL ((void*)0) #include <stdlib.h> // 你的其他代码
⚠️ 注意:如果后续引入的头文件也定义了NULL,部分编译器会抛出重复定义的警告,所以优先推荐方法1。
方法3:检查编译选项
如果你使用GCC、Clang这类编译器,看看是否启用了严格的C标准模式(比如-std=c89或-pedantic)。虽然C89标准中<stdlib.h>也应该包含NULL的定义,但部分老版本编译器可能存在兼容问题。可以尝试:
- 移除严格模式选项,或者
- 切换到更新的C标准,比如
-std=c99或-std=c11
另外补充一句:你的while (**arr != NULL)写法是合法的,只要arr的类型是指向指针的指针(比如char*** arr),和NULL的比较完全符合C语言规则,解决NULL的定义问题后就能正常运行了。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

