4

可変個引数関数があります:

LogWrite(FILE * fp, int level, const char * filename, const char * function, ...)

次のように呼び出す必要があります。

LogWrite(fp, int Level, __FILE__, __FUNCTION__, "Message: %s", message)

ただし、呼び出しを簡単にするために可変個引数マクロを作成したいと思います。

1: #define LOGWRITE_L1(...) LogWrite(file, 1, __FILE__, __FUNCTION__, ...)
or
2: #define LOGWRITE_L1(file, ...) LogWrite(file, 1, __FILE__, __FUNCTION__, ...)

これは、開発者が以下を使用して呼び出すことができるようにするためです。

LOGWRITE_L1(myfile, "Hello!");

それ以外の

LogWrite(myfile, 1, __FILE__, __FUNCTION__, "Hello!")

ただし、どちらの方法でもコンパイラエラーが発生します。

1: expected expression before '...'
2:'file' undeclared (first use in this function)

これは可能ですか、それとも時間を無駄にしていますか?私はこれまで可変個引数関数を使用したことがないので、よくわかりません。私の関数は機能します...完全な宣言を使用して呼び出し、必要なファイルに書き込みました。

4

2 に答える 2

7

__VA_ARGS__可変個引数の代わりに配置する必要があります。

#define LOGWRITE_L1(file, ...) LogWrite(file, 1, __FILE__, __FUNCTION__, __VA_ARGS__)

これは、C99、C11、およびC++11標準の一部にすぎません。一部のコンパイラは、可変個引数マクロの処理に関連する拡張機能を提供します。マニュアルを確認してください。

于 2012-05-14T22:09:32.557 に答える
4

__VA_ARGS__の代わりに使用...

#define LOGWRITE_L1(file, ...) LogWrite(file, 1, __FILE__, __FUNCTION__, __VA_ARGS__)
于 2012-05-14T22:11:17.843 に答える