malloc.h是一個非標準的 C 頭檔案,它宣告了與記憶體管理相關的 C 標準庫的擴展。它在 Linux 上可用。
我希望我的程式可以在許多平臺上編譯,但僅malloc.h在可用時才使用功能。
如何在編譯期間(通過宏)檢查該malloc.h庫是否可用于我的 C 程式?
編輯:解決方案也可以間接進行,例如檢查作業系統或其他任何東西。
uj5u.com熱心網友回復:
您生成(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
uj5u.com熱心網友回復:
通過宏
無法“通過宏”檢查標頭是否存在。
通常,創建一個小的有效程式#include <malloc.h>并嘗試編譯該程式。如果編譯成功,則說明header可用。構建系統是專門為自動化此類任務的目標而創建的工具,例如:CHECK_INCLUDE_FILE()在 cmake、AC_CHECK_HEADER()autoconf、conf.CheckCHeaderscons、cc.has_header介子等中。
注意:有一個 gcc 擴展__has_include https://gcc.gnu.org/onlinedocs/cpp/_005f_005fhas_005finclude.html將進入 C23 https://en.cppreference.com/w/c/23。如果您僅針對 gcc 或僅針對 C23,則可以使用#if __has_include(<malloc.h>).
uj5u.com熱心網友回復:
最簡單的方法是嘗試編譯一個包含 malloc.h 的程式,然后檢查編譯器的回傳代碼。如果編譯器回傳錯誤,則 malloc.h 不可用。
這是一個簡單的例子:
#include <stdio.h>
#include <malloc.h>
int main() {
printf("Hello, world!\n");
return 0;
}
如果您嘗試在沒有 malloc.h 的系統上編譯此程式,您將收到如下錯誤:
gcc test.c test.c:2:18:致命錯誤:malloc.h:沒有這樣的檔案或目錄#include <malloc.h> ^ 編譯終止。
如果 malloc.h 可用,程式將無錯誤地編譯
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514451.html
下一篇:如何使用rake任務檢查狀態
