因此,我正在編寫可移植嵌入式ANSI C代碼,試圖支持多個編譯器和硬件目標。每個編譯器/硬件供應商都支持不同的math.h函數。有的只支持C90,有的支持C99的子集,有的支持C99的全套。ISO C90/99檢查是否存在編譯器特定功能
我試圖找到一種方法來檢查預處理器中是否存在給定函數,以便我可以使用自定義宏如果它不存在。有些供應商在math.h中有外部函數,有些使用#define重新映射到某個內部調用。是否有一段代碼可以判斷它是否爲#defined或extern函數?我可以使用#ifdef作爲定義,但實際的函數調用呢?
是否檢查編譯器是否支持C99滿足您? –
您需要['autoconf'](http://www.gnu.org/software/autoconf/)。是的,這與合作是一種痛苦,但它是這項具體工作的最佳工具。 (它爲您實現了「編寫一系列測試.c文件,編譯它們,查看返回的錯誤代碼,並設置keshlam建議的相應-D標誌」的過程。) – zwol
您也可以使用[CMake]( http://www.cmake.org/),這是'autoconf'的更好選擇,因爲它是可移植的。它也很容易使用 – 2014-02-20 03:15:44