我有一個可變參數函數它打印在我的申請的錯誤消息,其代碼在下面給出:如何將變量參數轉換爲宏?
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()}
但是,這不會正確打印參數。
上面的宏定義有什麼問題?
什麼是修復?
@shawnchin:謝謝。我在MSVC6.0,MSVS-2005編譯器中試過,它似乎不支持可變參數宏。我猜GCC支持,但是你知道任何基於Windows的編譯器支持嗎? – goldenmean 2009-08-25 12:32:40
@goldenmean:此網站說MSVS-2005 Visual C++中引入了ISO風格的可變參數宏(http://msdn.microsoft.com/en-us/library/ms177415(VS.80).aspx) – 2009-08-25 12:47:15
@shawnchin:是否有任何特殊的MSVisual Studio項目選項需要設置,以使編譯器能夠編譯此可變宏。我嘗試設置幾個選項(例如將代碼編譯爲C++)是否有任何宏強制編譯器接受這些可變宏擴展(它們是C99擴展)? – goldenmean 2009-08-25 13:19:13