#define VS typedef

來源:互聯網
上載者:User

#define VS
typedef

1.       



#define
是預先處理指令
,是宏定義語句。在編譯預先處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的來源程式時才會發現可能的錯誤並報錯。通常用它來定義常量
(
包括無參量與帶參量
)
,以及用來實現那些

表面似和善、背後一長串

的宏,例如:

#define PI    
3.1415926

程式中的:
area=PI*r*r
會替換為
3.1415926*r*r
,如果你把
#define
語句中的數字
9
寫成字母
g
預先處理也照樣帶入。

2.       



typedef
是在編譯時間處理的
。它常用來定義一個標識符及關鍵字的別名,是語言編譯過程的一部分,但它並不實際分配記憶體空間,但是
You cannot use the typedef specifier
inside a function definition
。例如:

typedef   
int       INT;

typedef    int      
ARRAY[10];
typedef   (int*)   pINT;

typedef
可以增強程式的可讀性,以及標識符的靈活性,但它也有

非直觀性

等缺點。

 

3.       



typedef

#define
的區別

從以上的概念便也能基本清楚,
typedef
只是為了增加可讀性而為標識符另起的新名稱
(
僅僅只是個別名
)
,而
#define
原本在
C
中是為了定義常量,到


C++

const

enum

inline
的出現使它也漸漸成為了起別名的工具。有時很容易搞不清楚與
typedef
兩者到底該用哪個好,如
#define INT int
這樣的語句,用
typedef
一樣可以完成,用哪個好呢?我主張用
typedef
,因為在早期的許多
C
編譯器中這條語句是非法的,只是現今的編譯器又做了擴充。為了儘可能地相容,一般都遵循
#define
定義

可讀

的常量以及一些宏語句的任務,而
typedef
則常用來定義關鍵字、冗長的類型的別名。

宏定義只是簡單的字串代換(原地擴充),而
typedef
則不是原地擴充,它的新名字具有一定的封裝性,以致於新命名的標識符具有更易定義變數的功能。

      

      


樣本

1



typedef   
(int*)      pINT;

#define   
pINT2    int*

效果相同?實則不同!實踐中見差別:
pINT a,b;
的效果同
int *a; int *b;
表示定義了兩個整型指標變數。而
pINT2 a,b;
的效果同
int *a, b;
表示定義了一個整型指標變數
a
和整型變數
b

 

      


樣本

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
所指的對象。

4.       



#define
不是語句不要在行末加分號,否則會連分號一塊置換。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.