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