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++課程,還有大量乾貨哦
※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」