【发布时间】:2009-11-17 14:24:37
【问题描述】:
是否可以告诉 C 预处理器检查是否声明了函数(不是宏)?我尝试了以下方法,但它似乎不起作用:
#include <stdio.h>
int main(void)
{
#if defined(printf)
printf("You support printf!\n");
#else
puts("Either you don't support printf, or this test doesn't work.");
#endif
return 0;
}
【问题讨论】:
-
我对此原因非常感兴趣。您正在使用的库应该是一致的,以选择您的示例:没有 printf 就没有 stdio.h 并且如果 printf 可能在遥远的将来被删除,您现在将不知道替换的情况如何被调用。
-
我认为它不是专门针对 printf 的,只是任何函数名称。但是,如果你想知道那里的功能,只需调用它 - 编译器错误会告诉你:-)
-
我的主要动机是检查诸如 bcopy() 或 arc4random() 之类的函数(在编写跨平台程序时),这些函数并不总是被定义。
-
有些机器有“空白”功能,有些没有。我不知道它是在哪里定义的。这本来很好,但是唉。编辑:原来是 readline/chardefs.h 中的一个宏。
标签: c macros c-preprocessor