宏不是函數如果我們定義一個宏:
#defineMAX(a,b)a>b?a:b
當我們執行一個語句:
3+MAX(1,3);
我們期望的答案應該是6才對,其實呢,運行之后的答案1。與宏定義相掛鉤的就是優先級,算數運算符的優先級高于條件運算符,展開如下:
3+1>3?1:3,首先進行算符運算符的運算,即4>3?1:3,所以答案為1。請注意宏定義中的括號,這些括號的作用就是預防引起優先級相關的問題。有些專家建議在
C語言中只要牢記兩個優先級就夠了,乘除法優先級高于加減法,在設計其它操作符時,一律加上括號。
4、宏定義不是說明或語句,在行末不必加分號
比如,加上分號則連分號也一起置換。
5、宏不是類型定義
首先定義一個宏:
#definepCharchar*
再用pChar 定義兩個變量,之后用操作符sizeof讀取變量所占用內存大小,如果是指針類型的就占4個字節,如果是字符型的就占1個字節。

結果占用空間不一樣,變量類型自然不一樣,所以宏定義不是類型定義。那么,如果我換成typedef來定義類型呢?

宏定義只是簡單的字符串代換,是在預處理完成的,而typedef是在編譯時處理的,它不是作簡單的代換,而是對類型說明符重新命名。被命名的標識符具有類型定義說明。
6、與之相關的宏定義
編寫程序過程中,很多都需要條件編譯,來看一個常用的使用方法。
#if defined(CREDIT)
7、總結
宏的本質是代碼替換。
審核編輯:湯梓紅
-
C語言
+關注
關注
180文章
7630瀏覽量
140611 -
宏定義
+關注
關注
0文章
51瀏覽量
9188
發布評論請先 登錄
有關于宏定義的問題,涉及##和#
如何理解宏定義的這種寫法?
對宏定義的理解
怎么去解決結構體指針宏定義錯誤的問題呢
不帶參數的宏定義是什么?不帶參數的宏定義的資料介紹詳細過程概述
C語言基礎:宏定義使用do{}while(0)的好處

error:expected identifier before ‘(‘ token,結構體指針宏定義錯誤

評論