【发布时间】:2020-09-11 12:06:35
【问题描述】:
我正在用 C 语言编写一个头文件,需要 stdlib.h 才能工作。但是,当我检查是否定义了 _STDLIB_H 时,预处理器会说它不是,即使我包含了文件。我已经在多个编译器上尝试过它,它适用于大多数但不适用于tdm-gcc。我该如何解决这个问题?
【问题讨论】:
-
你为什么要检查那个?你不能只包括它吗?
标签: c gcc include c-preprocessor
我正在用 C 语言编写一个头文件,需要 stdlib.h 才能工作。但是,当我检查是否定义了 _STDLIB_H 时,预处理器会说它不是,即使我包含了文件。我已经在多个编译器上尝试过它,它适用于大多数但不适用于tdm-gcc。我该如何解决这个问题?
【问题讨论】:
标签: c gcc include c-preprocessor
查看stdlib.h 源代码,似乎要在 tdm-gcc 中查找的宏可能是 _TR1_STDLIB_H。
因此,您可以尝试以下方法:
#if defined _STDLIB_H || defined _TR1_STDLIB_H
【讨论】:
为了更安全地检查 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_SUCCESS 或EXIT_FAILURE 可能会更好
【讨论】: