2011-07-28 5 views
2

は私のコード可変引数を持つマクロを使用するにはどうすればよいですか?このコードはコンパイルできない理由

#include<stdarg.h> 

#define DPRINTF(_fmt, ...) debugPrintf(_fmt,__VA_ARGS__) 

void debugPrintf(const char *fmt, ...) 
{ 
char buf[128]; 
va_list ap; 

va_start(ap, fmt); 
vsnprintf(buf, sizeof(buf), fmt, ap); 
va_end(ap); 
fprintf(stderr,"%s",buf);   
return; 
} 

main() 
{ 
int a=10; 
DPRINTF("a is %d",a); 
DPRINTF("WHY THIS STATEMENT GETS ERROR"); 

} 

を参照してください。??イムそれが正しい仕事

//DPRINTF("WHY THIS STATEMENT GETS ERROR"); 

のコメント...

はまた、私は任意の変数

を渡したくないような条件を処理するためにデバッグを書くための任意の方法...(可変長引数)がある

答えて

3

ちょうど可変引数関数以外の

#define DPRINTF(...) debugPrintf(__VA_ARGS__) 

可変引数マクロを使用し、固定の引数を必要としません。

+0

これも働いています....クールな感謝... –

3

ダブルハッシュ

#define FOO(fmt, ...) printf(fmt, ##__VA_ARGS__) 

を試してみて最初の1の後に、引数なしの場合もあります。

+0

IIRC、これはgcc拡張を表します。 –

+0

ああ私の神....その働き...多くの人にありがとう.... –

+0

問題ない、うれしい助けてください。 –

関連する問題