3

有人知道如何用详细的选项(选择是否打印消息的选项)以一种很好的方式用 C 语言编写程序。

我的意思是,不要为代码中的每个 printf 编写 if(verbose) 。

有没有更优雅的解决方案?

4

3 回答 3

9

在调用 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 示例怎么样:

#define eprintf(format, ...) do {                 \
    if (ok_to_print)                              \
        fprintf(stderr, format, ##__VA_ARGS__);   \
} while(0)
于 2012-04-04T18:38:16.510 回答
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);
于 2012-04-04T18:41:12.207 回答
0

您可以编写自己的类似 printf 的函数来检查详细标志,然后在必要时调用 printf。

于 2012-04-04T18:38:35.700 回答