因此,我正在编写可移植嵌入式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