有人知道如何使用详细选项(选择是否打印消息的选项)以C语言编写程序。
我的意思是,不要在代码中为每个printf写一个if(详细)。
有更优雅的解决方案吗?
答案 0 :(得分:9)
只需使用(variadic)宏/ vararg函数在调用vfprintf之前测试一个标志。
/* Crude example. */
void my_log(char *format, ...)
{
va_list args;
if (!ok_to_log)
return;
va_start(args, format);
vprintf(format, args);
va_end(args);
}
略微修改后的gnu example:
#define eprintf(format, ...) do { \
if (ok_to_print) \
fprintf(stderr, format, ##__VA_ARGS__); \
} while(0)
答案 1 :(得分:3)
创建一个函数指针数组
print_function_type fx[2] = {quietprint, verboseprint};
而不是在打印时使用if,使用数组的正确元素
// if verbosemode is 0 call quietprint
// if verbosemode is 1 call verboseprint
fx[verbosemode]("%d", foo);
答案 2 :(得分:0)
您可以编写自己的类似printf的函数来检查详细标记,然后在必要时调用printf。