1. 程式人生 > >【C語言】typedef(自定義資料型別)與#define(巨集定義)用法比較

【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是一個型別說明符。由這個例子可見,巨集定義雖然也可表示資料型別,但畢竟是作為字元替換。在使用時要分外小心,以避出錯。