为什么我不能检查我是否在 tdm-gcc 编译器上包含 stdlib.h?
Why cant i check if i have included stdlib.h on tdm-gcc compiler?
我正在用 C 编写头文件,需要 stdlib.h
才能正常工作。但是,当我检查 _STDLIB_H
是否被定义时,预处理器说它没有,即使我包含了文件。我已经在多个编译器上尝试过它,它适用于大多数但不适用于 tdm-gcc
。我该如何解决这个问题?
为了更安全地检查 stdlib.h
是否被正确包含,您应该检查 C 标准要求文件定义的宏。
我可能遗漏了一些东西,但我没有看到 C 标准中对 stdlib.h
有任何要求来定义 _STDLIB_H
。我认为这可能只是编译器决定防止多重包含的一种常见方式。
试试
#include <stdlib.h>
#ifndef NULL
#error "stdlib.h not included"
#endif
因为 C 标准 要求 stdlib.h
定义 NULL
但是 none 这在技术上应该是必要的...我不知道有哪个预处理器在找不到您尝试访问的文件时不会抛出致命错误 #include
编辑:
根据 C 标准 stdio.h
也定义了 NULL
,所以也许检查 EXIT_SUCCESS
或 EXIT_FAILURE
会更好
查看 stdlib.h 源代码,似乎要在 tdm-gcc 中查找的宏可能是 _TR1_STDLIB_H
.
所以你可以尝试这样的事情:
#if defined _STDLIB_H || defined _TR1_STDLIB_H
我正在用 C 编写头文件,需要 stdlib.h
才能正常工作。但是,当我检查 _STDLIB_H
是否被定义时,预处理器说它没有,即使我包含了文件。我已经在多个编译器上尝试过它,它适用于大多数但不适用于 tdm-gcc
。我该如何解决这个问题?
为了更安全地检查 stdlib.h
是否被正确包含,您应该检查 C 标准要求文件定义的宏。
我可能遗漏了一些东西,但我没有看到 C 标准中对 stdlib.h
有任何要求来定义 _STDLIB_H
。我认为这可能只是编译器决定防止多重包含的一种常见方式。
试试
#include <stdlib.h>
#ifndef NULL
#error "stdlib.h not included"
#endif
因为 C 标准 要求 stdlib.h
定义 NULL
但是 none 这在技术上应该是必要的...我不知道有哪个预处理器在找不到您尝试访问的文件时不会抛出致命错误 #include
编辑:
根据 C 标准 stdio.h
也定义了 NULL
,所以也许检查 EXIT_SUCCESS
或 EXIT_FAILURE
查看 stdlib.h 源代码,似乎要在 tdm-gcc 中查找的宏可能是 _TR1_STDLIB_H
.
所以你可以尝试这样的事情:
#if defined _STDLIB_H || defined _TR1_STDLIB_H