define 和 typedef 區(qū)別

typedef

  • 一種在計(jì)算機(jī)編程中用來(lái)聲明自定義數(shù)據(jù)類型,配合各種原有數(shù)據(jù)類型達(dá)到簡(jiǎn)化編程目的的類型定義關(guān)鍵字
  • typedef 是 C 語(yǔ)言語(yǔ)句, 其功能是用戶為已有數(shù)據(jù)類型取別名

For Example

typedef int INTEGER;  
INTEGER a,b;   // 以后就可用INTEGER來(lái)代替int作整型變量的類型

用typedef定義數(shù)組、指針蜓竹、結(jié)構(gòu)等類型將帶來(lái)很大的方便,不僅使程序書寫簡(jiǎn)單而且使意義更為明確吓妆,因而增強(qiáng)了可讀性。例如:

typedef int a[10];//表示a是整型數(shù)組類型吨铸,數(shù)組長(zhǎng)度為10行拢。 
a s1,s2;//完全等效于:int s1[10],s2[10] ; 

同理 typedef void (*p)(void) 表示p是一種指向void型的指針類型!

#define

  • 預(yù)處理指令
    For Example
#define int INTEGER  

表示在源程序中的所在int將會(huì)被 INTEGER 原樣代替. 程序中有int a,b ;則在編譯前將被替換為INTEGER a,b;

區(qū)別

#define 是 C 中定義的語(yǔ)法, typedef 是 C++ 中定義的語(yǔ)法, 二者在 C++ 中可以通用, 但 #define 成了預(yù)編譯指令, typedef 當(dāng)成語(yǔ)句處理. typedef 和 define 都可以用來(lái)給對(duì)象取一個(gè)別名, 但是倆者卻有很大的不同, 有以下幾點(diǎn)

  • 執(zhí)行時(shí)間不同
    • 關(guān)鍵字 typedef 在編譯階段有效, 猶豫是在編譯階段, 因此 typededf 有類型檢查的功能.
    • define 是宏定義, 發(fā)生在預(yù)處理階段, 也就是編譯之前, 它只是進(jìn)行簡(jiǎn)單而機(jī)械的字符串替換, 而不進(jìn)行任何檢查.
    #define f(x) x*x  
    ----------------
    int a=6诞吱,b=2舟奠,c;  
    c=f(a) / f(b)狐胎;  
    printf("%d \n"鸭栖,c);  
    
    程序的輸出結(jié)果是: 36握巢,根本原因就在于#define只是簡(jiǎn)單的字符串替換晕鹊,應(yīng)當(dāng)加個(gè)括號(hào)“(X*X)”。
  • 功能不同
    typedef
    • typedef 用來(lái)定義類型的別名, 這些類型不止包含內(nèi)部類型 ( init, char 等), 還包括自定義類型 (如 struct), 可以起到使類型易于記憶的功能. 如

      typedef int (*PF) (const char *, const char *); 
      

      定義一個(gè)指向函數(shù)的指針的數(shù)據(jù)類型PF暴浦,其中函數(shù)返回值為int溅话,參數(shù)為const char *. 這個(gè)就和定義 Block 很像了

    • typedef 有另外一個(gè)重要的用途,那就是定義機(jī)器無(wú)關(guān)的類型歌焦,例如飞几,你可以定義一個(gè)叫 REAL 的浮點(diǎn)類型,在目標(biāo)機(jī)器上它可以i獲得最高的精度:

      typedef long double REAL; 
      

      在不支持 long double 的機(jī)器上独撇,該 typedef 看起來(lái)會(huì)是下面這樣:

      typedef double REAL; 
      

      并且屑墨,在連 double 都不支持的機(jī)器上,該 typedef 看起來(lái)會(huì)是這樣:

      typedef float REAL; 
      
    #define
    • 不止可以為類型取別名, 還可以定義常量, 變量, 編譯開關(guān)等.
  • 作用域不同
    #define 沒(méi)有作用域的限制, 只要是之前預(yù)定義過(guò)的宏, 在以后的程序中都可以使用. 而 typedef 有自己的作用域.
    void fun() {
      #define A int
    }
    void gun() {
    //在這里也可以使用A纷铣,因?yàn)楹晏鎿Q沒(méi)有作用域卵史,
    //但如果上面用的是typedef,那這里就不能用A 搜立,不過(guò)一般不在函數(shù)內(nèi)使用typedef
    } 
    
  • 對(duì)指針的操作
    二者修飾指針類型時(shí), 作用不同
    Typedef int * pint以躯;  
    #define PINT int *  
    Const pint p;//p不可更改啄踊,p指向的內(nèi)容可以更改忧设,相當(dāng)于 int * const p;  
    Const PINT p;//p可以更改颠通,p指向的內(nèi)容不能更改址晕,相當(dāng)于 const int *p;或 int const *p蒜哀;  
    pint s1, s2; //s1和s2都是int型指針  
    PINT s3, s4; //相當(dāng)于int * s3斩箫,s4吏砂;只有一個(gè)是指針。 
    

倆點(diǎn)關(guān)鍵區(qū)別

寫個(gè)代碼
  • typefdef 是一種徹底的"封裝"類型, 聲明他以后就不能再往里面添加別的東西. (換個(gè)說(shuō)法, typedef 是一個(gè)完整的獨(dú)立的類型, 并且和其他類型說(shuō)明符不能同時(shí)使用)
  • ② 在連續(xù)定義幾個(gè)變量的時(shí)候, typedef 可以保證所有變量都是同一個(gè)類型, 但是 #define 就不一定保持
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乘客,一起剝皮案震驚了整個(gè)濱河市狐血,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌易核,老刑警劉巖匈织,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異牡直,居然都是意外死亡缀匕,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門碰逸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乡小,“玉大人,你說(shuō)我怎么就攤上這事饵史÷樱” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵胳喷,是天一觀的道長(zhǎng)湃番。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吭露,這世上最難降的妖魔是什么吠撮? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮讲竿,結(jié)果婚禮上泥兰,老公的妹妹穿的比我還像新娘。我一直安慰自己题禀,他們只是感情好逾条,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著投剥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪担孔。 梳的紋絲不亂的頭發(fā)上江锨,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音糕篇,去河邊找鬼啄育。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拌消,可吹牛的內(nèi)容都是我干的挑豌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼氓英!你這毒婦竟也來(lái)了侯勉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤铝阐,失蹤者是張志新(化名)和其女友劉穎址貌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徘键,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡练对,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吹害。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片螟凭。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖它呀,靈堂內(nèi)的尸體忽然破棺而出螺男,到底是詐尸還是另有隱情,我是刑警寧澤钟些,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布烟号,位于F島的核電站,受9級(jí)特大地震影響政恍,放射性物質(zhì)發(fā)生泄漏汪拥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一篙耗、第九天 我趴在偏房一處隱蔽的房頂上張望迫筑。 院中可真熱鬧,春花似錦宗弯、人聲如沸脯燃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辕棚。三九已至,卻和暖如春邓厕,著一層夾襖步出監(jiān)牢的瞬間逝嚎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工详恼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留补君,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓昧互,卻偏偏與公主長(zhǎng)得像挽铁,于是被迫代替她去往敵國(guó)和親伟桅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容