C 如何在函数中使用printf检查变量?

C 如何在函数中使用printf检查变量?,c,formatting,C,Formatting,如果OUT为1,我想打印输出。所以我认为这是代码 #define OUT 1 void d_printf(char *text){ if(OUT) printf("%s", text); } int main(void){ d_printf("%d\n", 5); return 0; } 但是我的参数是char*,我无法发送%d,5。如何解决此问题?您可以使用一个简单的宏: #include <stdio.h> #d

如果OUT为1,我想打印输出。所以我认为这是代码

#define OUT 1

void d_printf(char *text){
  if(OUT)
    printf("%s", text);
}

int main(void){
  d_printf("%d\n", 5);
  return 0;
}

但是我的参数是char*,我无法发送%d,5。如何解决此问题?

您可以使用一个简单的宏:

#include <stdio.h>

#define OUT 1

#define d_printf  OUT && printf

int main(void) {
    d_printf("%d\n", 5);
    return 0;
}
#包括
#定义出1
#定义d_printf OUT&&printf
内部主(空){
d_printf(“%d\n”,5);
返回0;
}
如果收到有关未使用表达式的编译器警告,可以使用更复杂的宏:

#include <stdio.h>

#define OUT 1

#define d_printf(...)  do { if (OUT) printf(__VA_ARGS__); } while(0)

int main(void) {
    d_printf("%d\n", 5);
    return 0;
}
#包括
#定义出1
#定义d_printf(…)do{if(OUT)printf(u VA_ARGS_uu)}而(0)
内部主(空){
d_printf(“%d\n”,5);
返回0;
}

一种方法是将
d_printf
更改为接受可变长度参数,然后直接传递给。这是否回答了您的问题?另一种解决方案是分配一个字符串缓冲区,使用
snprintf
在该缓冲区中创建一个具有所需输出的字符串,然后将该缓冲区传递给
d_printf