#define 是預處理指令,它在預處理階段,進行簡單的替換,並不檢查錯誤。
typedef 是在編譯階段處理的,它的作用是為已存在的型別,取乙個別名。
eg: #define p_int int *
typedef int *p_int;
1、用他們宣告單個變數時都沒有問題,在這種情況下是一樣的。
p_int a;//int *a;
p_int b;
a和b均是指向int型別的指標。
2、用他們宣告多個變數時就有區別了。
p_int a,b;//a是指向int型別的指標變數, b是int型別的變數。
實際上這個宣告與int *a,b;是等價的。
p_int a,b;//a和b都是指向int型別的指標變數。
3、當它們與const關鍵字一起使用時也有區別。
const p_int a;//相當於:const int *a;
//這裡的a可以改變,a指向的內容不可改變。
const p_int b;//b不可以改變,b指向的內容可以改變。
4、可以用其他的型別說明符對#deinfe定義的型別名進行擴充套件,因為它是預處理階段的簡單替換。對於typdef所定義的型別名卻不能這樣做。
eg: #define int_t int
unsigned int_t a;//ok,相當於unsigned int a;
C語言中typedef與define的區別
typedef與define都是為乙個物件取別名。區別 原理不同 1 define是c語言的預處理指令,作用在預處理階段,不具有正確語法檢查,僅僅是在預處理階段字串的替換。2 typedef是乙個關鍵字,作用在編譯階段,具有型別檢查 typedef是給乙個已經存在的型別取別名 不能在函式內部使用ty...
C語言中typedef與 define巨集的區別
1.typedef最簡單的解釋就是給型別取別名,表面上理解為把第二個引數等同於第乙個引數,然後以後定義某個變數時,可以直接使用第乙個變數就可以了 typedef unsigned short uint16 t2.2.define是巨集定義,用來簡單的替換,這個替換的過程是發生在程式預編譯過程,它只會...
C語言中 define用法總結
1.簡單的巨集定義 define 識別符號 替換列表 替換列表可以是數,字串字面量,標點符號,運算子,識別符號,關鍵字,字元常量。注意 替換列表是可以為空的 典型錯誤 define n 100 int a n 這樣會成為int a 100 這裡會處理成為一種標識記號一樣 define n 100 i...