如果我的理解是正確的va_end
被稱爲進行清理,並在同樣的背景下,爲va_end
手冊頁說,我們可以在不調用va_start的情況下調用va_end嗎?
va_end用來()
的va_start的每次調用()必須由相應的 匹配在相同的函數中調用va_end()。在調用va_end(ap) 之後,變量ap是未定義的。列表的多次遍歷,每個由va_start()和va_end()括起來的 都是可能的。 va_end()可能是一個 宏或函數。
所以這是va_end
需求明顯,如果va_start
被稱爲被調用,但相反的關係成立,即應通過va_end
被va_start
之前始終?
我爲你添加了[C]標記,因爲'va_end'最初來自C。C++中的可變參數列表的使用非常有限(最好),因爲它們不是類型安全的,類(構造函數等),並有更好的選擇,例如可變模板。 –
簡短的回答,沒有。正如Michael Burr所說的那樣,這是未定義的行爲。有一些實現在va_start/va_end定義的底層使用malloc/free。 –