C预处理器:调用printf()的宏函数

时间:2014-03-10 08:47:34

标签: c macros c-preprocessor

我想有条件地使用printf()或语句:

#define USE_PRINTF

#ifdef USE_PRINTF
#define macrofn(str) printf(str)
#else
#define macrofn(str) some_statement
#ifndef USE_PRINTF

但我收到以下错误:

incompatible implicit declaration of built-in function 'printf'

我做错了什么?感谢

4 个答案:

答案 0 :(得分:5)

您不一定必须在宏定义之前包含<stdio.h>。对于您已经开始的#endif,您真正需要的是#if。例如,以下程序可以正常工作:

#define USE

#ifdef USE
#define asd printf("asd")
#else
#define asd puts("kek")
#endif

#include<stdio.h>

int main( ) {
    asd;
    getchar( );
    return 0;
}

所以......是的。

答案 1 :(得分:3)

您需要将#include <stdio.h>添加到您的文件中。

有关此错误消息的详细信息,请查看here

答案 2 :(得分:2)

如果您想使用stdio.h,则需要添加printf

答案 3 :(得分:2)

您应该使用以下语法:

#include <stdio.h>

#define USE_PRINTF

#ifdef USE_PRINTF
#define macrofn(str) printf(str)
#else
#define macrofn(str) some_statement
#endif