typedef與define的思考

2021-08-26 11:38:32 字數 1809 閱讀 2683

typedef

一,定義

typedef:宣告自定義資料型別,配合各種原有資料型別,用來簡化程式設計。

二,用途

1,便於移植

typedef int int32;

int32 a;//定義整型變數

(int32) a;//強制轉換型別

為什麼有int 還要取同名 int32 ?

答:a微處理器 int 16位,long 32位

b微處理器 short 16位,int 32位,long 64位

原本a處理器下程式:

typedef int int16;

typedeflong int32;

要移植到b處理器下,則僅僅需要更改這些新名稱就行,而不用更改整個程式。

typedefshort int16;

typedefint int32;

2,在舊的c**中,幫助struct。

由於在舊的c**中,宣告struct物件時,必須帶上struct。

如:struct node ;

而寫成typedef struct node

node_re;

node_re root;

3,定義已有型別的一種別名

typedef char *pchar;

pchar pa,pb;

為指標宣告typedef 時,容易出現問題。所以建議:只要為指標宣告 typedef,那麼都要在最終的 typedef 名稱中加乙個 const,以使得該指標本身所指物件不會通過指標被修改。

typedef const char *pchar;

define

一,定義:定義巨集,即允許用乙個標示符來表示乙個字串。

二,用處:

1,方便程式修改

定義程式中經常使用的常量,這樣在常量改變時,不用對整個程式進行修改。

例如:#define pi 3.141592653 //不用每次都輸入3.141592653 直接輸入 pi

2,提高程式執行效率

c語言中,函式的使用可以使程式更加模組化,便於組織,而且可以重複利用。

但是,函式呼叫時,需要保留呼叫函式的現場,便於子函式執行結束後能返回繼續執行。在子函式執行完後要恢復呼叫函式的現場,這需要一定時間。

如果子函式執行操作較多,這種轉換時間可以忽略。但是如果執行功能較少,則開銷相對較大。

例如:#define s(a,b) a*b //僅僅是一條乘法 操作

define與typedef的區別

typedef只是為了增加可讀性而為識別符號另起的新名稱(僅僅只是個別名),而#define原本在c中是為了定義常量,到了c++,const、enum、inline的出現使它也漸漸成為了起別名的工具。有時很容易搞不清楚與typedef兩者到底該用哪個好,如#define int int這樣的語句,用typedef一樣可以完成,用哪個好呢?我主張用typedef,因為在早期的許多c編譯器中這條語句是非法的,只是現今的編譯器又做了擴充。為了盡可能地相容,一般都遵循#define定義「可讀」的常量以及一些巨集語句的任務,而typedef則常用來定義關鍵字、冗長的型別的別名。

巨集定義只是簡單的字串代換(原地擴充套件),而typedef則不是原地擴充套件,它的新名字具有一定的封裝性,以致於新命名的識別符號具有更易定義變數的功能。請看上面第一大點**的第三行:

typedef (int*) pint;

#define pint2 int*

效果相同?實則不同!實踐中見差別:

pint a,b;的效果同int *a; int *b;表示定義了兩個整型指標變數。

而pint2 a,b;的效果同int *a, b;表示定義了乙個整型指標,乙個整型變數

typedef與 define 的區別

一 typedef的用法 typedef常用來定義乙個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,例項像 typedef int int typedef int array 10 typedef int pint typedef可以增強程式的可讀性,以及識別符號的靈...

typedef與 define 的區別

typedef與 define 的區別 一 typedef的用法 typedef常用來定義乙個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,例項像 typedef int int typedef int array 10 typedef int pint typede...

typedef與 define的區別

typedef與 define的區別 從以上的概念便也能基本清楚,typedef只是為了增加可讀性而為識別符號另起的新名稱 僅僅只是個別名 而 define 原本在c中是為了定義常量,到了c const enum inline的出現使它也漸漸成為了起別名的工具。有時很容易搞不清楚與typedef兩者...