巨集定義與型別定義的區別

2021-08-28 08:10:25 字數 796 閱讀 6592

先來看一下巨集定義與型別定義的定義。

一般來說,巨集定義(# define)是相當於字元替換,在**預編譯時就進行替換,編譯時候所有巨集定義的**改變為被替換的**,不限制任何**,任何字元都可以進行巨集定義,巨集定義可以寫在程式中的任何位置,它的作用範圍從定義觸到檔案尾,在這些範圍內都可以用巨集名進行替換,巨集是針對預處理器的任務;

而型別定義(typedef)不是字元替換,更像是字元名重改,意思就是給函式原來的所定義的型別換上乙個全新的名字,然後在後續的**中都應用這個全新的名字,型別定義是針對編譯器的任務;

下面咱們來看乙個簡單的例子,也許你就會更能明白一些。

首先咱們來看乙個關於巨集定義的例子:

你們的答案有可能是19對吧,那是因為你是這樣算的(a+b)*(b+c)+(c+a)。

正確的答案是12,應該是這樣算:a+b*b+c+c+a=12。

然後我們再來看乙個關於型別定義的例子:

typedef unsigned int uint; 它會在以後的**中, 認為uint就是unsigned int, 也就是說對編譯器來講又多了一種資料型別, 但是這種資料型別和unsigned int是一樣的.

typedef  int *pint,意思就是定義乙個指標型的整型資料型別,pint c,d就是相當於int *c,d。只是給資料的型別名稱重新換了乙個名字而已。

巨集定義與自定義型別

define int ptr int 這是巨集定義,編譯預處理階段要進行巨集替換,int ptr a,b會變成 int a,b 所以b不是指標型別 typedef int int ptr 這是自定義型別,也就是把int ptr定義為 int型指標,編譯階段會把c,d都識別為指標 test.c檔案中包...

const定義常量與巨集定義的區別!!!

巨集定義語法格式 define 巨集名稱 巨集值 不加分號,變數名一般設為大寫 巨集的替換與計算 舉乙個例子 define n 3 1 define y n n 1 n 若執行語句 z 2 n y 5 1 後 z 的值為多少?z 2 3 1 3 1 1 5 1 60 巨集的替換在 執行的預編譯階段,...

typedef與巨集定義區別

陷阱一 記住,typedef是定義了一種型別的新別名,不同於巨集,它不是簡單的字串替換。比如 先定義 typedef char pstr 然後 int mystrcmp const pstr,const pstr const pstr實際上相當於const char 嗎?不是的,它實際上相當於cha...