本文目錄一覽:
- 1、C語言的宏(macro)是什麼?怎樣使用宏?
- 2、C語言宏定義計算問題
- 3、C語言 宏的使用 比如 #define Power2(x) x*x main() { printf(“%d”,Power2(i+j)); } 這運算結果怎會是62?
- 4、C語言宏定義演算法
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語言宏定義計算問題
答案是21
因為你定義的f(x) x*x ,而你下面的i=f(4+4)/(2+2)中是講4+4作為x的值,所以展開的時候是這樣的, i=4+4*4+4 /(2+2),所以結果是 i=4+16+1 ,當然是21了
C語言 宏的使用 比如 #define Power2(x) x*x main() { printf(“%d”,Power2(i+j)); } 這運算結果怎會是62?
你的i和j的值是多少?C的宏定義,在編譯前,也就是預處理時會進行宏替換,就是宏體代替宏調用,其替換過程是原樣照搬的。比如你的程序,帶參數宏Power2(x)的宏體是”x*x「,所以在替換時,就變成了”i+j*i+j”,而不是你想要的”(i+j)*(i+j)”。如果你要帶括弧的,則宏定義是:#define Power2(x) (x)*(x)
C語言宏定義演算法
宏只是在編譯的時候進行替換,而不會對定義的內容進行計算,只是單純的替換, 首先N 定義為2,M 定義為N+1, 在編譯的時候,C系統就會把這裡的N變為2,
下面的NUM定義為了2*M+1,在編譯的時候,就直接把M變為N+1,放進去, 系統只是做了替換,
如果你用 #define N 2
#deine M (N+1)
#deine MUN 2*M+1 則可以得到MUN為2*(N+1)+1,要記住,宏只是替換,
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/280467.html