typedef 和define的區別

來源:互聯網
上載者:User

標籤:style   blog   color   使用   strong   re   

總結一下typedef和#define的區別

1.概念

  #define 它在編譯預先處理時進行簡單的替換,不作正確性檢查。它是預先處理指令。

  typedef 它在自己的範圍內給一個已經存在的類型一個別名。它是在是在編譯時間處理的。

  例子:

#define:

#define DO doubleDO val =5;//相當於 double va =5;#define FUN(X)  X+5int va = FUN(3); //相當於 va = 3+5

typedef:  

typedef double D;//就是給double起一個別名DD val;//相當於是double val//用dypedef定義數組typedef double arr[3];//arr就是一個長度為3的double類型數組arr arr1;   //相當於 double arr1[3]//用dypedef定義函數指標typedef void (*fun)();//表示fun是一個指向 void類型的指標函數void StrGet() {    qDebug()<<"str";}fun f1=StrGet;f1();

2.區別

  執行時間不一樣
    #define 是在預先處理階段,也就是在編譯之前進行替換工作
    typedef 是在編譯階段,會進行類型檢查

  範圍不同
    #define 無論在哪定義過,在其它的地都可以使用
    typedef 只能在定義的範圍內使用

  對指標的操作不一樣

#define PINT int *    typedef int * pint;    int a =3;    int b =5;    const pint p1=&a; //相當於 int * const p1;  p1 可以更改但指向的內容不能被修改    *p1=1;    p1=&b;  //error    const PINT p2 =&a;//相當於 const int * p2;  p2 不可以被修改但指向的內容可以修改    p2=&b;    *p2=1;  //error

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.