巨集定義語法格式:# define 巨集名稱 巨集值 //不加分號,變數名一般設為大寫
巨集的替換與計算 舉乙個例子:
#define n 3+1
#define y(n) ((n+1)*n)
若執行語句 z = 2 *(n+y(5+1))後 z 的值為多少?
z = 2*(3+1+(3+1+1)*5+1)= 60
巨集的替換在**執行的預編譯階段,預編譯階段完成的主要任務是巨集的替換和注釋的替換(注釋替換為空格,巨集出現的地方全都替換為該巨集定義時賦予的數值)
巨集定義的好處:①使**簡潔明瞭 ②方便**維護 如果有需求改變量值時 只需改變巨集定義的地方 而不用改**內部
const定義常量的格式:const 資料型別 常量名 = 常量數值 (若未指定資料型別,預設為int型別)
const int a = 100;//若資料型別為int 也可以寫為 const a = 100;
const 的作用就是指明 a 為常量而不是變數。此時如果想篡改a的值,編譯器就會報錯,比如:
a = 90;//此時編譯器會報錯 const 所定義的變數其值不可以再被修改,而且必須一開始就指定該值,也就是說用const定義敞亮 //的同時必須初始化。
綜上,兩者的區別可以總結為:
① 兩者在**生成時所被處理的階段不同,巨集的替換在預編譯(預處理)階段,而const 常量則在編譯階段才確定,並分配記憶體
②const常量有資料型別,而巨集沒有資料型別。編譯器只對巨集在預編譯階段進行替換,卻沒有型別及安全檢查,所以在替換過程中可能會出現錯誤,但是編譯器卻可以對const所定義的常量進行型別和安全檢查,由巨集引起的錯誤一般除錯不出來,而const常量可以
const常量與巨集定義區別
1 編譯器處理方式不同 define巨集是在預處理階段展開。const常量是編譯執行階段使用。2 型別和安全檢查不同 define巨集沒有型別,不做任何型別檢查,僅僅是展開。const常量有具體的型別,在編譯階段會執行型別檢查。3 儲存方式不同 define巨集僅僅是展開,有多少地方使用,就展開多少...
const常量與巨集定義區別
1 編譯器處理方式不同 define巨集是在預處理階段展開。const常量是編譯執行階段使用。2 型別和安全檢查不同 define巨集沒有型別,不做任何型別檢查,僅僅是展開。const常量有具體的型別,在編譯階段會執行型別檢查。3 儲存方式不同 define巨集僅僅是展開,有多少地方使用,就展開多少...
const常量與巨集定義的解析
c語言中的const修飾的變數是唯讀的,本質還是變數,也就是說可以用指標修改該變數的值,並不是真正意義上的常量,它只是告訴編譯器該變數不能出現在賦值號的左邊,修飾區域性變數時在棧上分配空間,修飾全域性變數在唯讀儲存區分配空間,且該const只在編譯時有效,在執行期無效。1 c 語言中const修飾的...