typedef 與 define 的區別

來源:互聯網
上載者:User

標籤:

1、區別


(1)定義、執行時間、範圍

定義、執行時間:

#define pchar char *typedef char *pchar;

    定義的格式差別,顯而易見的,要注意,define 是不能存在分號的(文本替換),而typedef 是存在逗號的(類型的重新命名)。

    同時,define 由前置處理器進行處理,只做簡單的文本替換的工作,不做任何檢查(正確性檢查、範圍檢查、類型檢查)

typedef 是給一個已經存在類型的別名,在編譯時間候處理。

範圍:

    define 只要一次定義,那麼就 沒有範圍的限制,在哪都可以被使用:

void func1()  {      #define HW "HelloWorld";  }    void func2()  {      string str = HW;      cout << str << endl;  }

    typedef 則不然,存在自己的範圍。

void func1()  {      typedef unsigned int UINT;  }    void func2()  {      UINT uValue = 5;//error C2065: ‘UINT‘ : undeclared identifier  }

(2)對指標的操作

#define pint int*typedef int* ppint;pint a1, b1;ppint c1, d1;

   上面的定義等價於

int * a1;int b1;int * c1;int * d1;

  對於處於定義指標的方式來說,還是使用 typedef 靠譜。


2、typedef 與 const 的結合

當:

typedef int * pint;int a = 1;const pint p1 = &amp;a;*p1 = 2;cout &lt;&lt; *p1 &lt;&lt; endl;
列印的結果是: 2

    可見: const pint p1; 是相當於 int * const p1,也就是 p1 是const 指標,p1 指向地址是常量(不能改變),所以定義的時候就需要被初始化,但是p1 所知的內容是可以被修改的,修改變為 2 列印輸出。

    可見,即使是換了順序,都是相當於: int * const p1; 也就是不論順序是怎麼挑換都是一個定義 const 指標。

typedef int * pint;int a = 1;pint const  p1 = &amp;a;*p1 = 2;cout &lt;&lt; *p1 &lt;&lt; endl;列印: 2

    如果非要定義出一個 const int * 類型的話,只能:

typedef const int * cpint;

    只有這個方法定義出來的才是,才可以定義出一個指向 const 的指標。

3、typedef 作用(1)簡化複雜的類型說明
int(*pfunc)(int,int)使用typedef:typedef int(*pfunc)(int,int)使用: pfunc ptr = 函數名;


(2)定義與平台無關的類型

    資料類型的定義,一般都是與平台有關的。對於大型的代碼的時候,如果定義的都是:long double a;  但是當平台不支援 long long 類型的時候,要進入代碼體一個個尋找,那真是要命:

typedef long double REAL;

    在跨平台的時候,只需要修改一次就全部解決了。

 

4、封裝程度不一樣

typedef 和 define 在縫紮un個程度是是不一樣的。typedef 可以看成是一種徹底的“封裝” 類型,也就是說,在對 typedef 聲明之後,就不能再往裡面添加別的東西了。而 define 則不然,他只是文本替換工作而已,所以聲明之後還是可以進行封裝的。

#define zhengxing1 intunsigned  zhengxing1 i;

編譯器正確通過。

typedef int zhengxing2;unsigned zhengxing2 j;
編譯器是編譯不過的。

typedef 與 define 的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.