日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C語言中宏定義的盲區(qū)有哪些?

1、概念

命令有兩種格式:一種是簡(jiǎn)單的宏定義,另一種是帶參數(shù)的宏定義。

創(chuàng)新互聯(lián)是專業(yè)的渾江網(wǎng)站建設(shè)公司,渾江接單;提供成都網(wǎng)站制作、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行渾江網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

(1)   簡(jiǎn)單的宏定義:

#define   <宏名> <字符串>

#define VALUE  ((sizeof(a)) /sizeof(a[0]))

(2) 帶參數(shù)的宏定義  #define   <宏名> (<參數(shù)表>)   <宏體>

#define MAX(a,b) ((a)>(b)?(a):(b))

2、不能忽略宏定義中的空格

下面的宏定義中f是否帶了參數(shù)呢?

#define f (x) ((x)+1)

答案是否定的,在f與(x)之間存在一個(gè)空格,導(dǎo)致變成了如下定義。

#define  f   (x)((x)+1)

預(yù)處理程序?qū)λ蛔魅魏螜z查。如有錯(cuò)誤,只能在編譯已被宏展開后的源程序時(shí)發(fā)現(xiàn)。

3、宏不是函數(shù)

如果我們定義一個(gè)宏:

#define  MAX(a,b)  a>b?a:b

當(dāng)我們執(zhí)行一個(gè)語句:

3+MAX(1,3);

我們期望的答案應(yīng)該是6才對(duì),其實(shí)呢,運(yùn)行之后的答案1。與宏定義相掛鉤的就是優(yōu)先級(jí),算數(shù)運(yùn)算符的優(yōu)先級(jí)高于條件運(yùn)算符,展開如下。

3+1>3?1:3,首先進(jìn)行算符運(yùn)算符的運(yùn)算,即4>3?1:3,所以答案為1。

請(qǐng)注意宏定義中的括號(hào),這些括號(hào)的作用就是預(yù)防引起優(yōu)先級(jí)相關(guān)的問題。有些專家建議在C語言中只要牢記兩個(gè)優(yōu)先級(jí)就夠了,乘除法優(yōu)先級(jí)高于加減法,在設(shè)計(jì)其它操作符時(shí),一律加上括號(hào)。

4、宏定義不是說明或語句,在行末不必加分號(hào),如加上分號(hào)則連分號(hào)也一起置換

5、宏不是類型定義

首先定義一個(gè)宏

#define pChar char*

再用pChar 定義兩個(gè)變量,之后用操作符sizeof讀取變量所占用內(nèi)存大小,如果是指針類型的就占4個(gè)字節(jié),如果是字符型的就占1個(gè)字節(jié)。

結(jié)果占用空間不一樣,變量類型自然不一樣,所以宏定義不是類型定義。那如果我換成typedef來定義類型呢?

宏定義只是簡(jiǎn)單的字符串代換,是在預(yù)處理完成的,而typedef是在編譯時(shí)處理的,它不是作簡(jiǎn)單的代換,而是對(duì)類型說明符重新命名。被命名的標(biāo)識(shí)符具有類型定義說明。

6、與之相關(guān)的宏定義

編寫程序過程中,很多都需要條件編譯,來看一個(gè)常用的使用方法。

#if defined(CREDIT)
credit();
#elif defined(DEBIT)
debit();
#else
printerror();
#endif

7、總結(jié)

宏的本質(zhì)是代碼替換。


網(wǎng)頁名稱:C語言中宏定義的盲區(qū)有哪些?
分享網(wǎng)址:http://www.5511xx.com/article/dhodhgd.html