c 中的常量摺疊

2021-06-02 16:40:48 字數 491 閱讀 2031

先來看乙個例子:

#include int main()

這就是編譯器的」常量摺疊」在作怪啦!

"常量摺疊"就是在編譯器進行語法分析的時候,將常量表示式計算求值,並用求得的值來替換表示式,放入常量表。可以算作一種編譯優化。

編譯器在優化的過程中,會把碰見的const全部以內容替換掉(跟巨集替換似的: #define pi 3.1415,用到pi時就用3.1415代替),這個出現在預編譯階段;但是在執行階段,它的記憶體裡存的東西確實改變了!

如果不想要編譯器的這種優化就要用到volatile關鍵字啦。

const int a=9;

修改為:

volatile const int a=9;

即可。         另外const在c   c++中還有一定的差別,有興趣的朋友可以google一下。

C 常量摺疊

c 中const 常量用法 說明 c語言中const 常量可以很容易地被改變 include include void main c 編譯器進行語法分析的時候,將常量表示式計算求值,並用求得的值來替換表示式,放入常量表,是 因為編譯器在優化的過程中,會把碰見的const全部以內容替換掉 跟巨集替換類...

C 的常量摺疊(三)

背景知識 符號表是一種用於語言翻譯器中的資料結構。在符號表中,程式源 中的每個識別符號都和它的宣告或使用資訊繫結在一起,比如其資料型別 作用域以及記憶體位址。符號表在編譯程式工作的過程中不斷收集 記錄和使用源程式中一些語法符號的型別和特徵等相關資訊。這些資訊一般以 形式儲存於系統中。如常數表 變數名...

c和c 中的const與常量摺疊

c中const修飾的是唯讀變數,c 中const修飾的是常量 在c c 中const在使用並無太大區別,只是c 對const更為嚴格,並且對const修飾的量進行了常量摺疊。先看如下例子,例子中不只測試c c 中const 的區別,也順便測試了const int 指標與int const指標的區別 ...