为什么我不能检查tdm-gcc编译器上是否包含stdlib.h?

时间:2020-05-24 21:09:57

标签: c gcc include c-preprocessor

我正在用C编写头文件,并且需要stdlib.h才能工作。但是,当我检查是否定义了_STDLIB_H时,即使我包含了文件,预处理器也没有定义。我已经在多种编译器上进行了尝试,这些编译器可以在大多数编译器上运行,但不能在tdm-gcc上运行。我该如何解决?

2 个答案:

答案 0 :(得分:1)

看看stdlib.h源代码,看来在tdm-gcc中寻找的宏可能是_TR1_STDLIB_H
因此,您可以尝试以下操作:

#if defined _STDLIB_H || defined _TR1_STDLIB_H

答案 1 :(得分:0)

为了更安全地检查stdlib.h是否正确包含,您应该检查C标准要求文件定义的宏。

我可能遗漏了一些东西,但是我没有看到C标准中要求stdlib.h定义_STDLIB_H的任何要求。我认为这可能只是编译器决定防止多重包含的一种常见方式。

尝试类似

#include <stdlib.h>

#ifndef NULL
#error "stdlib.h not included"
#endif

因为C标准需要stdlib.h定义了NULL

但这在技术上都不是必需的...我不知道如果预处理器找不到您尝试#include

的文件也不会引发致命错误

编辑:

根据C标准stdio.h也定义了NULL,因此最好检查EXIT_SUCCESSEXIT_FAILURE

相关问题