我使用va_list的是這樣的:va_list的和在va_arg
void foo(const char* firstArg, ...) {
va_list args;
va_start (args, firstArg);
for (const char* arg = firstArg; arg != NULL; arg = va_arg(arg, const char*)) {
// do something with arg
}
va_end(args);
}
FOO( 「123」, 「234」, 「345」)
前三個參數傳遞給正確富,但其中「 345" 完成後,
arg = va_arg(arg, const char*)
設置一些其它反常值ARG。
所以問題出在哪裏。我使用llvm3.0作爲我的編譯器。
OK,我這樣做'foo(「123」,「234」,「345」,NULL)'。我會測試它是否工作。 – holsety 2012-03-30 02:38:49
你真的應該傳遞'(char *)NULL',因爲'NULL'可能被定義爲一個普通的0,編譯器無法隱式知道它是一個沒有強制轉換的指針值。如果'sizeof(int)!= sizeof(char *)'對於64位實現來說並不少見,這一點尤其重要。 – FatalError 2012-03-30 03:30:32
其實不然。在C11中,§7.19''聲明_宏是 NULL NULL ,它擴展爲一個實現定義的空指針常量;因此只有一個破壞的實現可以以不等於空指針的方式定義NULL 。在§7.17''中的C99中的措詞是相同的,我相信C89也基本相同。 –
2012-03-30 03:50:50