我正在用C编写一个头文件,需要stdlib.h才能工作。但是,当我检查是否定义了_STDLIB_H时,预处理器说它没有定义,即使我包含了文件。我已经在多个编译器上尝试过它,在大多数编译器上,但在tdm-gcc上不起作用。我怎么才能解决这个问题?
发布于 2020-05-24 21:35:05
为了更安全地检查是否正确地包含了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
发布于 2020-05-24 21:37:49
看一看stdlib.h源代码,似乎可以在tdm中查找宏-gcc可能是_TR1_STDLIB_H。
所以你可以尝试这样的方法:
#if defined _STDLIB_H || defined _TR1_STDLIB_Hhttps://stackoverflow.com/questions/61992468
复制相似问题