C 零碎知識 巨集定義和常量的區別

2021-09-26 15:28:03 字數 1265 閱讀 3293

1.型別和安全檢查不同

巨集定義是字元替換,沒有資料型別的區別,同時這種替換沒有型別安全檢查,可能產生邊際效應等錯誤(字元替換可能產生意外的錯誤);

const常量是常量的宣告,有型別區別,需要在編譯階段進行型別檢查

2.編譯器處理不同

巨集定義是乙個「編譯時」概念,在預處理階段展開,不能對巨集定義進行除錯,生命週期結束與編譯時期;

const常量是乙個「執行時」概念,在程式執行使用,類似於乙個唯讀行資料

3.儲存方式不同

巨集定義是直接替換,不會分配記憶體,儲存與程式的**段中;

const常量需要進行記憶體分配,儲存於程式的資料段中(c++中的const預設為內部連線,也就是說,const僅在const被定義過的檔案裡才是可見的,而在連線時不能被其他編譯單元看到。當定義乙個const時,必須賦乙個值給它,除非用extern作出了清楚的說明。

通常c++編譯器並不為const建立儲存空間,相反它把這個定義儲存在它的符號表裡。但是extern強制進行了儲存空間分配(另外還有一些情況,如取乙個const的位址,也要進行儲存空間分配),由於extern意味著使用外部連線,因此必須分配儲存空間,這也就是說有幾個不同的編譯單元應當能夠引用它,所以它必須儲存空間。

4定義作用域不同

巨集定義不受作用域的限制

void f1 ()

void f2 ()

6是否可以做函式引數

巨集定義不能作為引數傳遞給函式

const常量可以在函式的引數列表**現

零碎知識C

c 中 dec,hex,oct,fixed,scientific,left,right,ws,setfill,setw,setprecision,eof,get,getline都是什麼意思 dec是十進位制 如cout這些是格式控制符 在使用時要加標頭檔案 include fixed是固定的意思 p...

C 零碎筆記2 常量

常量是固定值,在程式執行期間不會改變。這些固定的值,又叫做字面量。常量可以是任何的基本資料型別,可分為整型數字 浮點數字 字元 字串和布林值。常量就像是常規的變數,只不過常量的值在定義後不能進行修改。整數常量可以是十進位制 八進位制或十六進製制的常量。字首指定基數 0x 或 0x 表示十六進製制,0...

C 學習零碎知識

1 override重寫,是在子類中重寫父類中的方法,兩個函式的函式特徵 函式名 引數型別與個數 相同。用於擴充套件或修改繼承的方法 屬性 索引器或事件的抽象或虛擬實現。提供從基類繼承的成員的新實現,而通過override宣告重寫的方法稱為基方法。2 微服務 1 簡介 單體應用 垂直拆分 分布式服務...