アプリケーションにエラーメッセージを出力する可変引数関数があります。そのコードは次のとおりです。
void error(char *format,...)
{ va_list args;
printf("Error: ");
va_start(args, format);
vfprintf(stderr, format, args);
va_end(args);
printf("\n");
abort();
}
この関数は、次のようなエラー状態で使用されます。
error("invalid image width %d and image height %d in GIF file %s",wid,hei,name);
このerror()
関数は、さまざまな場所からさまざまな引数を使用して呼び出されます(可変引数関数)。
関数アプローチは正常に機能します。
さて、この関数をマクロに変換する必要がある場合、どうすればよいですか?私はそれを次のようにやってみました:
#define error(format) {va_list args;\
printf("Error: ");\
va_start(args, format);\
vfprintf(stderr, format, args);\
va_end(args);\
printf("\n"); abort()}
しかし、これは引数を正しく出力しません。
上記のマクロ定義の何が問題になっていますか?
修正は何ですか?