當前位置:
首頁 > 知識 > C語言中define和typedef的區別

C語言中define和typedef的區別

今天在用到typedef時,突然想到define好像也可以實現重定義的功能,就在想那這兩者之間有什麼區別,又有什麼聯繫呢?所以整理出了下面的文檔供大家參考,總結有疑問的地方,可以提出來一塊討論。

1.define:

#define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程序時才會發現可能的錯誤並報錯。

通常用它來定義常量(包括無參量與帶參量),以及用來實現那些「表面似和善、背後一長串」的宏,它本身並不在編譯過程中進行,而是在這之前(預處理過程)就已經完成了,但也因此難以發現潛在的錯誤及其它代碼維護問題

#define定義「可讀」的常量以及一些宏語句的任務

2.typedef:

typedef是在編譯時處理的。它在自己的作用域內給一個已經存在的類型一個別名,但是You cannot use the typedef specifier inside a function definition。

typedef常用來定義一個標識符及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配內存空間

typedef則常用來定義關鍵字、冗長的類型的別名

3.區別1:

typedef int * int_ptr;

#define int_ptr int *

作用都是用int_ptr代表 int * ,但是二者不同,正如前面所說 ,#define在預處理 時進行簡單的替換,而typedef不是簡單替換 ,而是採用如同定義變數的方法那樣來聲明一種類型。也就是說;

int_ptr a, b; // 相當於int * a, b; 只是簡單的宏替換

typedef int* int_ptr;

int_ptr a, b; //a, b 都為指向int的指針,typedef為int* 引入了一個新的助記符

4.區別2:

typedef int * pint ;

#define PINT int *

那麼:

const pint p ;//p不可更改,但p指向的內容可更改

const PINT p ;//p可更改,但是p指向的內容不可更改。

pint是一種指針類型 const pint p 就是把指針給鎖住了 p不可更改

而const PINT p 是const int * p 鎖的是指針p所指的對象。

零基礎小白到大神之路,歡迎加裙 四八七八七五零零四,群里有免費C++課程,還有大量乾貨哦


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT技術java交流 的精彩文章:

15 個有趣的 JS和CSS 庫
10 個優質的 CSS與JS LOGO 動畫示例
JAVA程序員代表大眾車,C語言程序員代表捷豹

TAG:IT技術java交流 |

您可能感興趣

白玉無瑕——FractalDesign Define R6機箱
3分鐘帶你搞明白Null和Undefined
分形工藝推出Define R6 USB-C中塔機箱:新增Type-C介面
輪轉的圓與缺,未完待續的#define Moon_|互動裝置
Wow,來魔都超藝術的Undefine看一場「愚人的幻境」展吧!
佛瑞克托設計Define R6 TG機箱評測:靜謐與模組化的結合
分形工藝Define S2機箱評測:靜音和性能的平衡點
信仰充值 分形工藝Define R6 TG 極光白 機箱開箱
分形工藝推出Define R5/S用升級套件:鋼化玻璃材質側板
箱包設計品牌COMBACK發布2019首個系列「UNDEFINED」