2011-07-28 24 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__) 

雙哈希是那裏的第一個之後沒有參數的情況下。

+0

IIRC,這描述了一個gcc擴展。 –

+0

噢我的上帝....它的工作......非常感謝... –

+0

沒問題,很樂意幫忙。 –