C define和typedef的區別

2021-10-21 00:19:35 字數 1743 閱讀 5998

c++#define和typedef的區別

在c/c++語言中,typedef常用來定義乙個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,如下:

typedef int int; // 識別符號在前,有分號

typedef int* pint;

#define為一巨集定義語句,通常用它來定義常量(包括無參量與帶參量),也可以是識別符號關鍵字等,它本身並不在編譯過程中進行,而是在這之前(預處理過程)就已經完成了。其本質是替換的功能

#define int int

#define pi 3.14 //無分號,因其並非嚴格意義上的語句,巨集名稱一般大寫

1.巨集定義只是簡單的字串代換(原地擴充套件),而typedef則不是原地擴充套件,它的新名字具有一定的封裝性,以致於新命名的識別符號具有更易定義變數的功能

eg: typedef (int*) pint;

#define pint2 int*

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

typedef常用於識別符號的定義,#define常用於常量的定於(c遺傳下來的)

1.定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如:

char* pa, pb; // 它只宣告了乙個指向字元變數的指標 和乙個字元變數;

以下則可行:

typedef char* pchar; // 一般用大寫

pchar pa, pb; // 可行,同時宣告了兩個指向字元變數的指標

2.用在舊的c**中,宣告struct新物件時,必須要帶上struct。

typedef struct student

stu;

stu p1; // 這樣就比原來的方式少寫了乙個struct,比較省事

在c++中,typedef的這種用途二不是很大,但是理解了它,對掌握以前的舊**還是有幫助的,畢竟我們在專案中有可能會遇到較早些年代遺留下來的**。

3.用typedef來定義與平台無關的型別。

比如定義乙個叫 real 的浮點型別,在目標平台一上,讓它表示最高精度的型別為:

typedef long double real;

在不支援 long double 的平台二上,改為:

typedef double real;

在連 double 都不支援的平台三上,改為:

typedef float real;

也就是說,當跨平台時,只要改下 typedef 本身就行,不用對其他原始碼做任何修改。

標準庫就廣泛使用了這個技巧,比如size_t。

另外,因為typedef是定義了一種型別的新別名,不是簡單的字串替換,所以它比巨集來得穩健(雖然用巨集有時也可以完成以上的用途)。

1.當const和typedef一起出現時,typedef不是簡單的字串替換。

#include

using namespace std;

typedef int * int;

int main()

2. typedef在語法上是乙個儲存類的關鍵字(如auto、extern、mutable、static、register等一樣),雖然它並不真正影響物件的儲存特性,如:

typedef static int int2; //不可行

編譯將失敗,會提示「指定了乙個以上的儲存類」。

C define和typedef及複雜宣告

1.定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如 char pa,pb typedef char pchar 一般用大寫 pchar pa,pb 2.用在舊的c的 中,宣告struct新物件時,必須要帶上struct,即形式為 struct 結構名 物件名,如 ...

C define用法總結

1 define 無引數巨集定義 用法 一般形式為 define 識別符號 字串 1 表示其為預處理命令,凡是以 開頭的都是預處理命令 define 為巨集定義命令 識別符號 為所定義的巨集名 字串 可以是常數 表示式 字串等。2 除了經常用到的如 define maxnum 100 之外,還有其它...

C define巨集定義

define 巨集名 字串這裡所說的字串是一般意義上的字串行,不要和c語言中的字串等同,它不需要雙引號。include define m n n 3 n int main 在預處理時經巨集展開後該語句變為 sum 3 nn 3n 4 nn 3n 5 nn 3n 需要注意的是,在巨集定義中表示式 nn...