2017-05-07 40 views
0

爲什麼FLexeLint在下面的代碼中拋出錯誤「警告530:符號'va'(第23行)未初始化」。FlexeLint在va_list上拋出錯誤

void debug(int msglevel, const char *fmt, ...) 
{ 
va_list va; 
va_start(va, fmt); 
vfprintf(stderr, fmt, va); 
va_end(va); 
} 

是否需要初始化va_list?

回答

0

這是沒有必要的。從man page for stdarg

void va_start(va_list ap, last); 

va_start()宏,va_arg()va_end()初始化爲後續使用AP,必須首先調用。

另外,從C standard第7.16.1.4:

va_start宏應之前,將未命名的參數的任何接入被調用。

va_start宏用於由va_argva_end宏後續使用初始化ap。不應該調用va_startva_copy宏來重新初始化ap而不是 中間調用va_end宏用於相同的ap