C 中typedef和 define簡介

2022-06-13 06:51:09 字數 1597 閱讀 8940

本文基於《c++ primer(第5版)》和網上部落格,整理而成。

一、型別別名

型別別名是乙個名字,它是某種型別的同義詞,有兩種方法可用於定義型別別名:typedef、using。

1、關鍵字typedef

typedef 它在自己的作用域內給乙個已經存在的型別乙個別名,編譯階段,會進行型別檢查。

1 typedef double wages;   //

wages是double的同義詞

2 wages hourly; //

等價於double hourly;

注意:使用typedef時,最後要加分號,另外,含有typedef的宣告語句定義的不再是變數而是型別別名。

(1)指標、常量和型別別名

若某個型別別名指代的是復合型別或常量時,要特別注意。

1 typedef char *pstring;

2 pstring a,b; //

a,b都是指向char的指標

3const pstring cstr=0; //

cstr是指向char的常量指標

針對pstring,其基本資料型別是指標,對第三行**它實際上相當於char*   const。故不能直接將型別別名替換成它本來的樣子,來理解該語句的含義。

注:當const和typedef一起出現時,typedef不是僅僅簡單的字串替換。

(2)返回陣列指標

1 typedef int arrt[10];   //

arrt是乙個型別別名,它表示的型別是2//

含有10個整數的陣列

3 arrt *func(int i); //

func返回乙個指向還有10個整數的陣列指標

二、#define

1、define是預處理指令的一種,它用來定義巨集,巨集只是乙個簡單的替換,將巨集變數所對應的值替換。不做正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。

1

#define n 5

2int

main()

3

2、define的容易出現的問題

(1)如:想計算a=10*10,結果輸出35

1

#define n 5+5

2int

main()

3

這是因為define只是簡單的替換,所以,a=5+5*5+5。若想計算10*10,可將第一行改為

1

#define n (5+5)

另外,兩者的作用域不同

1、#define 無論在哪定義過,在其它的地都可以使用

2、typedef 只能在定義的作用域內使用

ref:

C語言中typedef的用法和 define區別

typedef 型別定義 typedef 是給各種資料型別定義新名字,主要是用來簡潔的表示一些複雜的資料型別,比如說指向其他物件指標之類 defined也有這個意思,但是define巨集只是進行一種簡單的替換。普通的變數宣告方式,比如 宣告乙個字元型變數 char c 宣告乙個字元型指標變數為 ch...

c 中 defin的基本意思

空指令,無任何效果 include包含乙個源 檔案 define定義巨集 undef取消已定義的巨集 if如果給定條件為真,則編譯下面 ifdef如果巨集已經定義,則編譯下面 ifndef如果巨集沒有定義,則編譯下面 elif如果前面的 if給定條件不為真,當前條件為真,則編譯下面 endif結束乙...

糾結的const(static) 和 define

const static 和 define 在開發中常用來定義常量,這樣做的好處是 使 更易維護 提高 的效率。1 const static const是c c 中的乙個關鍵字 修飾符 const一般用來定義乙個常量,既然叫做常量,即以後再也不能修改其值。const 定義常量時,編譯器通常不為普通c...