typedef和define的區別

2021-03-31 23:56:56 字數 1347 閱讀 1415

define char* string;

string filename;

這段**是可以工作的那麼為什麼還要多個typedef呢?

請看下面**

利用上面的**,如果這樣寫

string file1,file2;

經過替換, 變成

char* file1,file2;

雖然在編譯上不錯但是含義卻錯了, 裡面的 file1是指標而file2是乙個字元

但是用了 typedef就沒這個問題了.

typedef char* string;

string file1,file2;

相當於

char *file1,*file2;

利用typedef這個特性

我們可以這樣寫一句話

typedef void (*pf)();         //乙個函式指標

(*(pf)0x12345678)();          //將位址 0x12345678看作乙個函式的開始.

但是,typedef也有侷限性.用它定義的型別不能組合使用.

typedef int int32;

unsigned int32 a;

這樣用就錯了.

因為編譯器並沒有翻譯成 unsigned int a;

而是直接拒絕了這樣的組合.

相反,#define就沒這個問題了

#define int int32;

unsigned int32 a;

使用typedef一些需要注意的問題.

typedef char *string;

const string s;

上面的定義究竟是

const char *s;         //s是乙個指向 const char的指標 (指標所指向的內容唯讀)

還是 char *const s;        //s是指向char 的const指標       (指標本身的位置無法改變)

正確答案是後者.因為 typedef 定義了 string 後, const修飾的物件是 string 而 string本身

是指標,於是const string的意思就是 string的值是常量,最後, s就被理解為指向char 的 const

指標了.

還有點需要注意.

1 c++裡面允許完全相同的typedef 表示式多次出現.

比如:

void abc()

這是正確的

2 * 這個申明符號是右結合的.

char* s1,s2;

相當於

char (*s1),s2;

Typedef和define的區別

typedef和define都可以用來給物件取乙個別名,但是兩者卻有著很大不同。1 首先,二者執行時間不同 關鍵字typedef在編譯階段有效,由於是在編譯階段,因此typedef有型別檢查的功能。define則是巨集定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字串替換,而不進行任何...

typedef和 define的區別

一 typedef的用法 二 define的用法 define為一巨集定義語句,通常用它來定義常量 包括無參量與帶參量 以及用來實現那些 表面似和善 背後一長串 的巨集,它本身並不在編 譯過程中進行,而是在這之前 預處理過程 就已經完成了,但也因此難以發現潛在的錯誤及其它 維護問題,define的用...

typedef和 define的區別

typedef和 define的區別 使用巨集定義的重新命名常量的好處 程式易讀性強 便於維護和修改 1 define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。例如 define pi 3.141592...