帶參的巨集和帶參函式很相似,但有本質上的不同,把同一表示式用函式處理與用巨集處理
的結果有可能是不同的。
【示例①】用函式計算平方值。
1. #include 2.
3. int sq(int y)
6.7. int main()
12. return 0;
13. }
執行結果:
1^2 = 1
2^2 = 4
3^2 = 9
4^2 = 16
5^2 = 25
【示例②】用巨集計算平方值。
1. #include 2.
3. #define sq(y) ((y)*(y))
4.5. int main()
10. return 0;
11. }
vc 6.0 下執行結果:
1^2 = 1
3^2 = 9
5^2 = 25
c-free(mingw)下執行結果:
3^2 = 1
5^2 = 9
7^2 = 25
之所以出現不同的結果,與 printf() 引數列表中表示式的計算順序和優先順序有關,這
裡不再深究。
分析如下:在示例①中,函式呼叫是把實參 i 值傳給形參 y 後自增 1,然後輸出函式
值,所以要迴圈 5 次,輸出 1~5 的平方值。而在示例②中巨集呼叫時只作代換,sq(i++) 被
代換為 ((i++) * (i++))。第一次迴圈,i 的值為 1,(i++) * (i++)=1;第二次迴圈 i 的值為 3,
(i++) * (i++)=9;第三次迴圈 i 的值為 5,(i++) * (i++)=25;第四次迴圈,i 的值為 7,終
止迴圈。
從以上分析可以看出函式呼叫和巨集呼叫二者在形式上相似,在本質上是完全不同的。
巨集定義也可用來定義多個語句,在巨集呼叫時,把這些語句又代換到源程式內。看下面的
例子。
1. #include 2. #define sssv(s1, s2, s3, v) s1=l*w; s2=l*h; s3=w*h; v=w*l*h;
3. int main()
執行結果:
sa=12
sb=15
sc=20
vv=60
C之帶參巨集定義
1.帶參巨集定義跟前面文章有所區別,不是簡單的數值或者字串替換,是要進行引數替換。2.本人理解,帶參巨集是很方便的,一些固定輸入和輸出咱們可以選擇帶參巨集,類似工程中多出要計算兩數相乘,這種情況我們就可以使用帶參巨集。define s a,b a b qdebug 2,3 6 define pi 3...
帶參巨集定義的思考
帶有引數的巨集定義 巨集定義是一種替換,所以返回的通常是帶有運算子表示式.不能返回語句.通常用的一些運算子 三目運算子 代替if語句 特殊建議 為了保證準確性,在 中放入變數 下面是一些巨集定義的例子 1,判斷字元是不是10進 值的 數字 define decchk c c 0 c 9 2,判斷字元...
C語言巨集定義和巨集定義函式
c語言巨集定義和巨集定義函式 巨集定義可以幫助我們防止出錯,提高 的可移植性和可讀性等。在軟體開發過程中,經常有一些常用或者通用的功能或者 段,這些功能既可以寫成函式,也可以封裝成為巨集定義。那麼究竟是用函式好,還是巨集定義好?這就要求我們對二者進行合理的取捨。我們來看乙個例子,比較兩個數或者表示式...