日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

#define宏加括号和不加括号的区别

發布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 #define宏加括号和不加括号的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#define 宏是在代碼中不加任何驗證的直接替代,當宏中包含運算符時要在最外層加括號,不然可能會出錯

下面使用一個簡單的例子來驗證一下,代碼中定義一個求兩個數中最大數的宏:

MAX_wrong在外層沒有加括號,MAX_right在外層加了括號

#include<stdlib.h> #include<stdio.h>#define MAX_wrong(x,y) x>y?x:y #define MAX_right(x,y) (x>y?x:y)int main() {int x, y;scanf("x=%d y=%d", &x, &y);//下面這行等價于 int a = x>y?x:y*6int a = MAX_wrong(x,y) * 6; //下面這行等價于 int a = (x>y?x:y)*6 int b = MAX_right(x,y) * 6;/*下面這行輸出的兩個結果是一樣的*/printf("%d %d\n", MAX_wrong(x,y), MAX_right(x,y));/*當x>y時,a和b值不一樣,當x<=y時,a和b的值一樣*/printf("%d %d\n", a, b);return 0; }

經過下面兩個測試用例,發現不管定義宏時外層加沒加括號,宏MAX_wrong和宏MAX_right的值都是一樣的,沒有問題。

但是要對宏進行運算時出現了問題,下面第一個的測試結果中,a和b的值碰巧一樣;但是第二個測試結果中a和b的值不同,b是我們想要的值,a的值和預想中不一樣。

分析其原因:

int a = MAX_wrong(x,y) * 6; 這句話實際相當于?int a = x>y?x:y* 6;??

x>y?x:y* 6??的意思是如果x>y則返回x,否則返回冒號后面的值y*6

而int b?= MAX_right(x,y) * 6; 這句話實際相當于?int a = (x>y?x:y) * 6;??

括號的優先級要高于*,所以會先計算x>y?x:y的值,再進行*6,與我們想要的一樣。

完畢!

總結

以上是生活随笔為你收集整理的#define宏加括号和不加括号的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。