define與typedef的區別

2021-06-21 09:40:15 字數 1458 閱讀 1312

相信學過c語言的大部分人都知道define和typedef在功能上有很多相似的地方,但是它們有什麼不同呢?現在

mayuyu將來一一告訴你。

首先define是編譯預處理指令,其實它定義的變數是在編譯預處理時進行簡單的替換,不會作正確性檢查,不 管

含義是否正確照樣帶入,只有在編譯時已被展開的源程式才會發現可能的錯誤並報錯。而typedef是在編譯時處

理的,它在自己的作用域內給乙個已經存在的型別乙個別名。

這樣看來define的範圍其實比typedef廣,對於define來說,我們可以對乙個型別取別名,還可以對乙個常數取

別名,還可以對乙個函式取別名,等等。而對於typedef只能對乙個已經存在的資料型別取別名。比如:

#define pi 3.1415926 ,由於mayuyu不小心把'9'寫成'g',那麼在編譯預處理時不會作正確性檢查,照樣帶

入,這樣就會出錯了。再比如#define p int*與typedef int* p就有很大不同。

#define p int*

p a,b;

相當於int *a,b,因為我們知道int* a,b與int *a,b是一樣的,這樣巨集替換後a是int*,而b是int。

而對於

typedef來說,如下例子:

typdef int* p;

p a,b;

這樣實際上相當於int *a,*b; a,b都是指標型別。可以看出define與typedef的巨大不同了吧?

有一句話說得好:軟體的維護成本與程式設計師的創造力的平方成正比。接下來我們來看一段**:

typedef int* pointer1;

#define pointer2 int*

const pointer1 p1;

const pointer2 p2;

對於p1,實際上相當於int* const p1;所以p1不可以改變,而p1所指向的內容可以改變。

對於p2,實際上相當於const int *p2或者int const *p2,因為const與int誰在前都一樣,所以p2指標可

以改變,而p2指向的內容不可以改變。

其實define在很多時候都是不安全的,而且容易出錯。比如有如下**:

#include #include #include #include using namespace std;

#define f(x) x * x

int main()

{ int ans = f(2) / f(2);

cout<

或許本來你希望的答案是1,結果卻得到4,因為define是直接替換,即ans = 2 * 2 / 2 * 2 = 4。要糾正,

我們只需要把#define f(x) x * x 改為 #define f(x) (x * x)即可。

typedef與 define 的區別

一 typedef的用法 typedef常用來定義乙個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,例項像 typedef int int typedef int array 10 typedef int pint typedef可以增強程式的可讀性,以及識別符號的靈...

typedef與 define 的區別

typedef與 define 的區別 一 typedef的用法 typedef常用來定義乙個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,例項像 typedef int int typedef int array 10 typedef int pint typede...

typedef與 define的區別

typedef與 define的區別 從以上的概念便也能基本清楚,typedef只是為了增加可讀性而為識別符號另起的新名稱 僅僅只是個別名 而 define 原本在c中是為了定義常量,到了c const enum inline的出現使它也漸漸成為了起別名的工具。有時很容易搞不清楚與typedef兩者...