如何检查 'malloc.h' 在 C 中是否可用?



>malloc.h是一个非标准的 C 标头,它声明了与内存管理相关的 C 标准库的扩展。它在Linux上可用。

我希望我的程序可以在许多平台上编译,但仅在可用时使用malloc.h功能。

如何在编译时(通过宏)检查malloc.h库是否可用于我的 C 程序?

编辑:解决方案也可以间接进行,例如检查操作系统或其他任何内容。

你生成(autoconf,shell脚本创建一个小c程序等)一个头文件,比如config.h,它只包含标题(如果可用)。 如果您不想依赖 malloc.h 定义的内容,可以选择定义一个常量:

#include <malloc.h>
#define MALLOC_H_FOUND 1

然后,您编写代码,包含此头文件,并且仅根据 malloc.h 中找到的符号或上面定义的常量执行操作:

#include "config.h"
#ifdef _MALLOC_H // or MALLOC_H_FOUND
// use malloc.c specific features
#else
// fallback
#endif

via macros

无法"通过宏"检查标头是否存在。

通常,创建一个带有#include <malloc.h>的小型有效程序并尝试编译该程序。如果编译成功,则表示标头可用。构建系统是专门为自动化此类任务的目标而创建的工具,例如:cmake中的CHECK_INCLUDE_FILE(),自动AC_CHECK_HEADER()中的,scons中的conf.CheckCHeader,介子中的cc.has_header等。

注意:有一个 gcc 扩展__has_includehttps://gcc.gnu.org/onlinedocs/cpp/_005f_005fhas_005finclude.html 即将进入 C23 https://en.cppreference.com/w/c/23 .如果您只针对 gcc 或仅针对 C23,您可以使用#if __has_include(<malloc.h>).

最简单的方法是尝试编译一个包含 malloc.h 的程序,然后检查编译器的返回代码。如果编译器返回错误,则 malloc.h 不可用。

下面是一个简单的示例:

#include <stdio.h>
#include <malloc.h>
int main() {
printf("Hello, world!n");
return 0;
}

如果您尝试在没有 malloc.h 的系统上编译此程序,则会收到如下错误:

海湾合作委员会测试.c test.c:2:18:致命错误:malloc.h:没有这样的文件或目录 #include^ 编译终止。

如果 malloc.h 可用,程序将编译而不会出错

相关内容

  • 没有找到相关文章

最新更新