我有以下宏:爲什麼在使用__VA_ARGS__從宏調用函數時「vsprintf」卡住了?
#define TRACE__LOW(str, col, ...)\
TR_Trace("\r\e[" COLOR(col) "%s :: %s():%d; LOW - " str "\e[0m\r\n",\
##__VA_ARGS__);
而且功能TR_Trace看起來是這樣的:
void TR_Trace(const char *const string, ...)
{
va_list aptr;
size_t stringSize = 0;
char tempString[250];
va_start(aptr, string);
vsprintf(tempString, string, aptr);
va_end(aptr);
}
而我使用它是這樣的:
TRACE__LOW("Led[%d] toggled every %d milliseconds (%5d)", GREEN
init_parameters.led, delay_time, counter++);
問題這裏是一旦執行到vsprintf(tempString,string,aptr);它卡在那裏。
是否有人知道發生了什麼,或者如果我沒有正確使用這個VA_ARGS?
問候。
你是什麼意思 「卡住」 是什麼意思?另外,你的意思是使用'vprintf()'而不是'vsprintf()'? – augurar
你不應該在'__VA_ARGS__'之前使用'##';你不會將它粘貼到另一個字符串上。什麼是'綠色',它應該是'綠色',?否則我不明白這一行。 –
@MattMcNabb ## __ VA_ARGS__是已知的擴展名,當__VA_ARGS__爲空時可以去掉','符號。它實際上是正確的(但非標準)。 – keltar