7

重複の可能性:
可変引数マクロの作成方法 (可変数の引数)

と同様の引数を受け入れてprintfログに記録する、基本的な C のログ マクロが必要です。ただし、ログの記録方法 (ログ レベル、ファイル vsstderrなど) を、実行時ではなくコンパイル時に設定する必要があります。低レベルのロギングを無視するようにパラメーターを設定すると、メソッドは何もせず、うまくいけばコードから最適化されます。

これまでのところ、コンパイル時に定義されたパラメーターに基づいて定義されたマクロがあります。パラメータが定義されている場合、ログは私のログ メソッドに送られ (ファイルにログを記録する)、そうでない場合は に送られstderrます。ただし、このマクロには文字列しか渡すことができません。log メソッドは、無制限の数の引数を取ることができ、printf構文を使用して機能します。ログ ファイルに無数の引数を渡すようにマクロを設定する方法があるかどうか知りたいですか?

そして、答えは私にはできないということだと思うので、基本的なCで私が望むものを達成する別の方法があります(私はC ++またはブーストを使用できません)。

4

4 に答える 4

7

C99 には、可変数の引数を受け入れることができるマクロがあります。それらは可変個引数マクロと呼ばれます。

http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html

例:

#define eprintf(...) fprintf (stderr, __VA_ARGS__)
#define dfprintf(stream, ...) fprintf(stream, "DEBUG: " __VA_ARGS__)
于 2012-06-11T19:44:37.617 に答える
2

はい、できます。C99 はこれをすぐにサポートします

構文は次のようになります。

#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)

于 2012-06-11T19:44:50.843 に答える
0

省略記号を使用して、可変数の引数を取るマクロを定義できます。

#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)

http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/4/html/Using_the_GNU_Compiler_Collection/variadic-macros.html

于 2012-06-11T19:48:56.853 に答える