巨集 列舉 typedef

2021-07-22 06:16:16 字數 1679 閱讀 5436

預處理也稱為預編譯,為編譯做預備工作,主要進行**文字的替換工作,用於處理#開頭的指令,其中預處理器產生編譯器的輸出。同乙個處理階段所進行的工作只是純粹地替換與展開,沒有任何計算功能。

c/c++標頭檔案的ifndef/define/endif的作用:如果乙個專案中存在兩個c檔案,而這兩個c檔案都include了同乙個標頭檔案,當編譯時,這兩個c檔案要一同編譯成乙個可執行檔案,可能會產生大量的宣告衝突。而解決的辦法是把頭檔案的內容都包含在#ifndef 和 #endif 中。

#include,編譯器先從標準庫路徑開始搜尋filename.h,使得系統檔案呼叫較快。而對於#include'filename.h' 編譯器先從使用者的工作路徑開始搜尋filename.h,然後尋找系統路徑,自定義檔案較快。

1)巨集定義主要是在預處理命令,不是語句,在進行巨集定義時,不能以分號結束。主要做的是在編譯錢做字元替換工作,需要對**進行展開,相對函式呼叫的方式,會存在較多的冗餘**。由於還沒編譯,所以無法進行型別檢查。只有在編譯的時候才能檢查型別是否匹配。

2)由於優先順序的不同,使用巨集定義時,可能會存在***,所以要需要注意括號的使用。

3) 無法單步除錯。

4)使用巨集無法操作類的私有資料成員。

5)考慮到可能存在資料溢位的問題,更加規範的寫法是使用長整型,即ul型別。

含引數的巨集與函式的的區別:

1)函式中的實參和形參都要定義型別,兩者的型別要求一致,如果不一致,會進行型別轉換。巨集不存在型別問題,巨集名無型別,它的引數也無型別。

2)函式呼叫時,實現求出實參表示式的值,然後帶入。帶參的巨集只是進行簡單的字元替換。

3)巨集替換不占用執行時間,而函式呼叫則占用執行時間。

4)函式呼叫是在程式時處理的,需要分配臨時的記憶體單元,巨集展開是在編譯時執行的,在展開時不分配記憶體單元,也不進行值得傳遞,也沒有返回值的概念。

5)巨集展開後源程式會變得很長,因為每展開一次使程式內容增長,而函式呼叫不使源程式變長。

巨集來代表簡單的表示式比較合適。

列舉和define的不同:

1) 列舉常量是實體中的一種,而巨集定義不是實體。

2)列舉可以一次定義多個常量,巨集只能定義乙個。

3)列舉常量屬於常量,有型別。巨集定義不是常量,沒有型別。

4)#define巨集常量在預編譯階段進行文字的替換工作,列舉常量在編譯的時候確定其值。

5)一般在編譯器裡,可以除錯列舉常量,但是不能除錯巨集常量。

typedef 和 define的區別:

typedef 和 define 都是替物件取乙個別名,以此來增強程式的可讀性。

1)原理不同。

#define是c語言中定義的語法,它是預

處理命令,在預處理時進行簡單而機械的字串替換,不做型別檢查。

typedef是關鍵字,在編譯時處理,有型別檢查的功能。在自己的作用域內給乙個已經存在的型別取乙個別名,但是不能在函式定義裡面使用識別符號typedef。用typedef 定義陣列、指標、結構等型別將帶來很大的方便,可以增強程式的可讀性。

2)功能不同。

typedef用來定義型別的別名,這些型別不僅可以包含內部型別,還包括自定義型別,可以使型別易於記憶。#define 不只是可以為型別取乙個別名,還可以定義常量、變數、編譯開關等。

3)作用域的不同。#define沒有作用域的限制,只要是之前預定義過的巨集,在以後的程式中都可以使用,而typedef 有自己的作用域。

4)對指標的操作不同。

巨集和列舉及typedef

巨集和列舉及typedef 巨集和列舉及typedef三者有相似的功能,但又有各自獨特的用途和特點,以下主要介紹三者的用法和注意事項。1.列舉 a.列舉的目的值提高程式的可讀性。b.列舉型別的宣告是指用一組符號名稱來代替一組整數常量。c.列舉常量都是整數型別的。d.在宣告列舉型別時如果沒有對符號名稱...

列舉 共用體 typedef與巨集定義

c 語言列舉型別 實際問題中,有些變數的取值被限制在一定範圍內。例如,乙個星期內只有七天,一年 只有十二個月,乙個班每週有六門課程等。c 語言提供了一種列舉 enum 型別,可以列出所有可能的取值。定義形式為 enum 變數名 這些值也稱為列舉元素。注意最後的分號 不能少。例如,列出乙個星期有幾天 ...

typedef跟列舉變數。

typedef enum errorstatus 這個 怎麼解釋?這個語句的作用是為資料型別 enum 定義乙個別名errorstatus,這樣以後定義變數時就寫errorstatus a 就可以了,而不用寫較長的enum a 了.typedef的用於其實很簡單,但是當typedef後面跟個列舉變數...