【C語言】typedef(自定義數據類型)與#define(宏定義)用法比較

  不管是在C語言還是在C++中,typedef這個詞都不少見,當然出現頻率較高的還是在C代碼中。typedef和#define有些相似,但更多的是不同,特別是在一些複雜的用法上,就完全不同了。

     1.宏定義(#define)

     宏定義又稱爲宏代換、宏替換,簡稱“宏”。

     格式:#define 標識符 字符串

     其中的標識符就是所謂的符號常量,也成爲“宏名”。

     預處理(預編譯)工作也叫作宏展開:將宏名替換爲字符串。掌握“宏”概念的關鍵是“換”,一切以換爲前提。

      2.自定義數據類型(typedef)

     定義一種類型的別名,而不只是簡單的宏替換。可以用typedef可以解決同時聲明多個指針型變量的問題。

     請看下面的例子:

​​#define INT1 int
typedef int INT2;

#define PINT int *
typedef int * SINT;​​

     從形式上看它們相似,但在實際使用中卻不相同。

     下面分別用INT1,INT2,PINT,SINT定義變量就可以看出它們的區別:

INT1 a,b;
INT2 c,d;
PINT e,f;
SINT g,h;

     在經過宏替換後變爲:

int a,b;
INT2 c,d;
int * e,f;
SINT g,h;

     在上面的變量中,變量a和b爲整型變量,變量c和d也爲整型變量;在這裏我們看不出宏定義和數據類型定義的區別。而變量e爲整型指針變量,變量f爲整型變量;變量g和h則均爲整型指針變量,因爲SINT是一個類型說明符。由這個例子可見,宏定義雖然也可表示數據類型,但畢竟是作爲字符替換。在使用時要分外小心,以避出錯。

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章