国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

淺談關于C語言中#define的副作用

2020-01-26 13:30:42
字體:
來源:轉載
供稿:網友

MFC雖然沒有未來,但是我覺得MFC的思想還是有必要研究研究的,在MFC中或者一些底層代碼的編寫中,宏是相當好用的,為什么呢?因為宏只是簡單的替換,不進行類型轉換,替換就意味著靈活,而C語言編程的靈魂就是靈活啊。

但是在高級語言中,甚至C++中,是提倡用const的,不提倡用#define,因為#define有一定的副作用,玩不好就沒命了。
這里我們討論下#define的副作用。

# include <stdio.h># include <stdlib.h># define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))int main(void){ int a = 5; int b = 0; CALL_WITH_MAX(++a,b); CALL_WITH_MAX(++a,b+20); return 0;}

分析:
上面的問題,不知道大家有沒有看出來。
對于CALL_WITH_MAX(++a,b);

1、a首先加1 ,變成了6

2、再和b進行比較,結果是a大,最后返回的結果是(++a),又被加1 ,最后的結果是7

 對于CALL_WITH_MAX(++a,b+20);

1、a首先加1 ,變成了8
2、再和b進行比較,結果是a大,最后返回的結果是b,此時的b為20,那么a只加了一次,a的結果是8

# include <stdio.h># include <stdlib.h># define CALL_WITH_MAX(a,b) f((a) > (b) ? (a):(b))void f(int x){ printf("compare result = %d/n",x); }int main(void){ int a = 5; int b = 0; printf("Initial value a = %d/n",a); CALL_WITH_MAX(++a,b); printf("excute the first a = %d/n/n",a); printf("Initial value a = %d/n",a); CALL_WITH_MAX(++a,b+20); printf("excute the second a = %d/n/n",a);   return 0;}

結果分析如下:

以上所述是小編給大家介紹的關于C語言中#define的副作用詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 宜春市| 建始县| 竹溪县| 宜良县| 石台县| 阳原县| 颍上县| 河西区| 隆昌县| 辽宁省| 陵川县| 鹤山市| 许昌市| 独山县| 七台河市| 兰州市| 陇西县| 梨树县| 安新县| 赞皇县| 察哈| 四川省| 柳州市| 广水市| 墨江| 峨边| 灌南县| 易门县| 丽水市| 南江县| 青河县| 康平县| 西贡区| 丰台区| 长治市| 额济纳旗| 永仁县| 英德市| 北川| 晋宁县| 临安市|