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

首頁 > 編程 > C++ > 正文

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

2020-05-23 12:53:25
字體:
來源:轉載
供稿:網友

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,副作用

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 鹤峰县| 房山区| 日喀则市| 宜城市| 湾仔区| 彭山县| 日照市| 莲花县| 鹤峰县| 卢氏县| 葫芦岛市| 抚州市| 靖西县| 清远市| 大理市| 普兰县| 岳池县| 桂林市| 淮安市| 岑溪市| 五家渠市| 安平县| 泸州市| 察雅县| 溧阳市| 扶余县| 阿拉善右旗| 陵水| 疏附县| 安图县| 安阳县| 新丰县| 绵竹市| 宜春市| 鱼台县| 巩义市| 加查县| 忻州市| 织金县| 廊坊市| 吴川市|