欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

淺談關(guān)于C語言中#define的副作用

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

MFC雖然沒有未來,但是我覺得MFC的思想還是有必要研究研究的,在MFC中或者一些底層代碼的編寫中,宏是相當(dāng)好用的,為什么呢?因為宏只是簡單的替換,不進行類型轉(zhuǎn)換,替換就意味著靈活,而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進行比較,結(jié)果是a大,最后返回的結(jié)果是(++a),又被加1 ,最后的結(jié)果是7

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

1、a首先加1 ,變成了8
2、再和b進行比較,結(jié)果是a大,最后返回的結(jié)果是b,此時的b為20,那么a只加了一次,a的結(jié)果是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;
}

結(jié)果分析如下:

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

上一篇:C++單例類模板詳解

欄    目:C語言

下一篇:淺談C++中字符串輸入get與getline的區(qū)別

本文標(biāo)題:淺談關(guān)于C語言中#define的副作用

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/403.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有