本文目錄一覽:
C語言中的宏定義如何使用?
宏定義又稱為宏代換、宏替換,簡稱”宏”。
格式:
#define 標識符 字符串
其中的標識符就是所謂的符號常量,也稱為”宏名”。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字符串。
掌握”宏”概念的關鍵是”換”。一切以換為前提、做任何事情之前先要換,準確理解之前就要”換”。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define Pi 3.1415926
把程序中出現的Pi全部換成3.1415926
C語言的宏(macro)是什麼?怎樣使用宏?
#define VERSION—STAMP “1.02″上例中所定義的這種形式的宏通常被稱為標識符。在上例中,標識符VERSION_STAMP即代表字符串”1.02″——在編譯預處理時,源代碼中的每個VERSION_STAMP標識符都將被字符串“1.02”替換掉。以下是另一個宏定義的例子:#define CUBE(x)((x),(x)*(x))上例中定義了一個名為CUBE的宏,它有一個參數x。CUBE宏有自己的宏體,即((x)*(x)*(x))——在編譯預處理時,源代碼中的每個CUBE(x)宏都將被((x)*(x)*(x))替換掉。使用宏有以下幾點好處: (1)在輸入源代碼時,可省去許多鍵入操作。(2)因為宏只需定義一次,但可以多次使用,所以使用宏能增強程序的易讀性和可靠性。(3)使用宏不需要額外的開銷,因為宏所代表的代碼只在宏出現的地方展開,因此不會引起程序中的跳轉。(4)宏的參數對類型不敏感,因此你不必考慮將何種數據類型傳遞給宏。需要注意的是,在宏名和括起參數的括號之間絕對不能有空格。此外,為了避免在翻譯宏時產生歧義,宏體也應該用括號括起來。例如,象下例中這樣定義CUBE宏是不正確的:denne CUBE(x) x * x * x對傳遞給宏的參數也要小心,例如,一種常見的錯誤就是將自增變量傳遞給宏,請看下例:#include #include CUBE(x) (x * x * x)void main (void);void main (void){int x, y;x = 5;y = CUBE( + +x);printfC’y is %d\n” . y);}在上例中,y究竟等於多少呢?實際上,y既不等於125(5的立方),也不等於336(6* 7*8),而是等於512。因為變量x被作為參數傳遞給宏時進行了自增運算,所以上例中的CUBE宏實際上是按以下形式展開的:y = ((++x) * (++x) * (++x));這樣,每次引用x時,x都要自增,所以你得到的結果與你預期的結果相差很遠,在上例中,由於x被引用了3次,而且又使用了自增運算符,因此,在展開宏的代碼時,x實際上為8,你將得到8的立方,而不5的立方。上述錯誤是比較常見的,作者曾親眼見過有多年C語言編程經驗的人犯這種錯誤。因為在程序中檢查這種錯誤是非常費勁的,所以你要給予充分的注意。你最好試一下上面的例子,親眼看一下那個令人驚訝的結果值(512)。宏也可使用一些特殊的運算符,例如字符串化運算符“#”和。連接運算符“##”。“#”運算符能將宏的參數轉換為帶雙引號的字符串,請看下例:define DEBUG_VALUE(v) printf(#v”is equal to %d.\n”,v)你可以在程序中用DEBUG_VALUE宏檢查變量的值,請看下例:int x=20;DEBUG_VALUE(x);上述語句將在屏幕上打印”x is equal to 20″。這個例子說明,宏所使用的“#”運算符是一種非常方便的調試工具。“##”運算符的作用是將兩個獨立的字符串連接成一個字符串。
c語言宏定義如何用?用宏定義有什麼優點?
主要用於函數重定義,通用性,可以用一個變量符號替代另一個變量符號
格式:#define M(x,y) x+y
在主程序里寫入z=M(6,9);等價於z=6+9;而寫成z=(6-8,9);等價於z=6-8+9 ;直接代入
還有就是 :#define Uint unsigned int 即用 Uint 代替unsigned int 便於書寫,還有就是不同操作系統的通用變量識別
c語言使用宏3個步驟是什麼
c語言使用宏3個步驟是:
1)寫出這個宏的定義,比如
#define ADD(a,b) ((a)+(b))
2)在代碼中應用這個宏,例如
xx=ADD(3+4,5)*ADD(0,7)
3)預編譯時系統自動展開宏,例如上述宏展開後的結果是
xx=((3+4)+(5))*((0)+(7))
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/230428.html