程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言typedef詳解

C語言typedef詳解

編輯:關於C語言

C語言typedef詳解


在C還是C++代碼中,typedef都使用的很多。typedef與#define有些相似,其實是不同的。

基本定義:typedef為C語言的關鍵字,作用是為一種數據類型定義一個新名字,這裡的數據類型包括基本數據類型(int,char),也包括自定義的數據類型(struct)。

(1)與#define的區別

typedef有點像#define宏,其實際類型替代同義字。不同點是typedef在編譯時被解釋,因此讓編譯器來應付超越預處理器能力的文本替換。

(2)減少錯誤

定義一種類型的別名,而不只是簡單的宏替換。可以用作同時聲明指針型的多個對象。比如:

char* pa,pb;

這多數不符合我們的意圖,它只聲明一個指向字符變量的指針和一個字符變量。可以使用下面方式修改:
typedef char* pchar;
pchar pa,pb;
這種方式很有用,特別是char* pa,pb;的定義,初學者往往認為是定義了兩個字符型指針,其實不是,而用typedef char* pchar 就不會出現這個問題,減少了錯誤的發生。

(3)直觀簡潔

用在舊的C代碼中,配合struct使用。以前的代碼中,聲明struct新對象時,必須要帶上struct,即形式為:struct 結構體名 對象名。如:

struct tagPOINT1 {
    int x;
    int y;
};
struct tagPOINT1 p1;

如果使用typedef代碼如下:


typedef struct tagPOINT { int x; int y; }POINT; POINT p1;//可以這樣; struct tagPOINT p2;//也可以這樣;
或:
typedef struct {
    int x;
    int y;
}POINT;
POINT p1;
POINT p1;這樣就比原來的方式少寫了一個struct,比較省事,尤其在大量使用的時候。

(4)平台無關性

用typedef來定義與平台無關的類型。比如可以定義一個REAL的浮點類型,在目標機器上可以獲得最高的精度。

typedef long double REAL;
在不支持long double的機器上,可以修改為如下:
typedef double REAL;
如果連double都不支持,修改為如下:
typedef float REAL;
也就是說,當跨平台時,只要改下typedef本身就行,不用對其他源碼做任何修改。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved