3

誰かがCで詳細オプション(メッセージを印刷するかどうかを選択するオプション)を使ってプログラムを書く方法を知っていますか?

つまり、コード内の各printfにif(verbose)を記述しないということです。

よりエレガントな解決策はありますか?

4

3 に答える 3

9

vfprintfのようなものを呼び出す前に、フラグをテストする(可変個引数)マクロ/vararg関数を使用するだけです。

/* 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 に答える