有一天,我正在將一個用C99標準編寫的程序轉換成C11。基本上動機是使用MSVC的代碼,但它是用Linux編寫的,並且大部分都是使用默認的GCC行爲編譯的。在代碼轉換過程中,我發現你不能在任何語句後去除函數的變量,也就是說你必須在函數的頂部聲明它們。使用C99和C11時的效率問題。
但我的問題是,它不會違反有效的編程規則,變量應該在其使用附近進行聲明,以使其最大化緩存命中?例如,在一個200 LOC的大函數中,我想在函數的最後使用一些大的靜態查找數組。在使用導致更多緩存命中之前不會聲明並初始化它?還是我簡單地缺少C11 C語言標準的一些基本點?
C2011(我恨名字C11)允許與代碼混合的聲明。 *我明白微軟的編譯器只能理解C89,可能只有一些擴展。* – pmg
這與C89有關,在這裏你不能在同一個塊中的語句之後放置聲明。 C99和C11中不再存在此要求。 – ouah
MSVC不支持C11。也許你的意思是C89? – ecatmur