簡體   English   中英

我們可以在不調用va_start的情況下調用va_end嗎?

[英]Can we call va_end without invoking va_start?

如果我的理解是正確的, va_end被調用以進行清理並且在相同的上下文中, va_end手冊頁說

va_end用來()

每次調用va_start()都必須與同一函數中相應的va_end()調用相匹配。 在調用va_end(ap)之后,變量ap未定義。 列表的多次遍歷,每個遍歷由va_start()和va_end()括起來都是可能的。 va_end()可以是宏或函數。

因此,如果調用va_start則顯然需要調用va_end ,但是反向關系是否成立,即va_end應始終以va_start

從C99 7.15.1.3/2 “的va_end宏”:

如果沒有相應的va_start或va_copy宏調用,或者在返回之前未調用va_end宏,則行為未定義。

不,另一種選擇是va_copy() 它們都需要與va_end()配對。

在其他情況下,沒有必要這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM