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