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兩者...