alloca函数的风险_alloca的函数范围中的goto是否有效?
實際上,規(guī)則6.8.6.1規(guī)定:
A goto statement is not allowed to jump past any declarations of objects
with variably modified types.
在您的代碼中,不存在具有可變修改類型的對象. alloca不聲明對象(編譯器必須關(guān)注).因此,沒有類似于alloca的范圍,并且沒有理由在規(guī)則6.8.6.1的意義上存在未定義的行為.
編輯
稍微詳細(xì)說明答案:VLA情況下行為的“不確定性”是由于承諾聲明對象在其范圍內(nèi)(在語言級別)“已知”.通常,聲明為代碼執(zhí)行設(shè)置上下文.它不需要在運(yùn)行時執(zhí)行.但是,在VLA的情況下不是這樣:這里的承諾部分在運(yùn)行時實現(xiàn),打破了C的靜態(tài)聲明方法.為了避免導(dǎo)致動態(tài)類型系統(tǒng)的進(jìn)一步?jīng)_突,規(guī)則6.8.6.1避免了這種沖突.
相反,在語言層面,alloca只是一個函數(shù);它的電話不構(gòu)成任何范圍.在調(diào)用它時,它只對其運(yùn)行時行為做出承諾.如果它沒有被調(diào)用,我們不會“期望”任何函數(shù).因此,它的純粹存在不會引起任何沖突:兩種情況(繞過或不繞過)都有明確定義的語義.
總結(jié)
以上是生活随笔為你收集整理的alloca函数的风险_alloca的函数范围中的goto是否有效?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【工作技巧】防止电脑睡眠,让鼠标自动周期
- 下一篇: json文件转Excel