首頁 常見問題 C語言中typedef和define有什麼差別

C語言中typedef和define有什麼差別

Apr 04, 2019 am 09:54 AM

typedef和define的差異有:define是預處理編輯器,可定義巨集存在被取代的可能性而typedef是由編輯器處理的,並且遵循範圍規則,可用作定義類型別名

#define是一個C指令,它也是用來定義類似typedef的各種資料型別的別名。但它們之間仍有差別,接下來在文章中具體為大家介紹它們之間的區別,具有一定的參考作用,希望對大家有所幫助

C語言中typedef和define有什麼差別

##【推薦課程:C語言教學

1、預處理器VS編譯器

#define由預處理器處理的,它將#define值從定義點複製貼上到使用點。而typedef是由編譯器處理的,並且是新類型的實際定義。在控制將到達編譯器時,所有#define都將被取代。

差異的影響

(1)typedef要以分號結束而#define不以分號結束

#(2) #define中可能存在替換的副作用,例如:

   typedef char * string_t;         
   #define string_d char *        
   string_t s1,s2; // s1和s2都是char *类型        
   string_d s3,s4; // s3是char *但是s4的类型是char(而不是char *)
登入後複製

第二個聲明中的問題是因為預處理器會將其替換為

char * s3,s4;
登入後複製

這表示s3是char *類型,但s4將是char類型。如果想要所有的變數都成為指標類型就所有變數必須指定*

(3)typedef遵循範圍規則。即在範圍內(函數內)定義了新類型,則只有範圍存在時才會顯示新類型名稱。但是當預處理器遇到#define時,它將取代所有出現的事件(之後沒有範圍規則)。例如:

 int main (){            
 { 
 //新范围开始              
 typedef int myInt_t;                 
 #define myInt_d int                
 myInt_t a;  // a的类型为int                
 myInt_d b;  // b的类型为int            
 } //新范围结束           
 myInt_t c; //错误,输入myInt_t未找到            
 myInt_d d; //d的类型为int        
 }
登入後複製

2、巨集VS類型別名

##define也可用來定義宏,但是typedef只能用於為現有型別提供新名稱(它不能建立新類型)。類似地,#define可以用來定義變數

#define N 10
登入後複製

其實是不會定義N,但是會在整個程式碼中將N替換為10。所以可以用來命名常數。而typedef只能為已定義的類型提供新名稱

3、將typedef作為類型別名##某些類型定義只能使用typedef定義,而不能使用#define定義。例:

(1)為大小為10的整數陣列賦一個新名稱

       typedef int arr [ 10 ] ;
登入後複製

(2)為結構型別賦予新名稱

typedef struct {           
int a;            
char b;        
} myType;
登入後複製

總結:以上就是本篇文章的全部內容了,希望對大家有幫助。

以上是C語言中typedef和define有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

c語言中typedef struct的用法 c語言中typedef struct的用法 May 09, 2024 am 10:15 AM

c語言中typedef struct的用法

typedef的用法是什麼 typedef的用法是什麼 Sep 04, 2023 pm 01:20 PM

typedef的用法是什麼

理解 C++ 函數指標的記憶體管理:避免指標陷阱 理解 C++ 函數指標的記憶體管理:避免指標陷阱 Apr 29, 2024 pm 09:03 PM

理解 C++ 函數指標的記憶體管理:避免指標陷阱

Linux核心定時器與延遲工作驅動開發詳解 Linux核心定時器與延遲工作驅動開發詳解 Feb 13, 2024 am 11:57 AM

Linux核心定時器與延遲工作驅動開發詳解

define怎麼定義多行宏 define怎麼定義多行宏 Oct 11, 2023 pm 01:24 PM

define怎麼定義多行宏

探究PHP中define函數的重要性與作用 探究PHP中define函數的重要性與作用 Mar 19, 2024 pm 12:12 PM

探究PHP中define函數的重要性與作用

c語言簡單煙火程式碼怎麼寫 c語言簡單煙火程式碼怎麼寫 Apr 13, 2024 pm 09:18 PM

c語言簡單煙火程式碼怎麼寫

c++中typedef struct和struct的差別 c++中typedef struct和struct的差別 May 01, 2024 am 11:36 AM

c++中typedef struct和struct的差別