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

首頁 > 編程 > C > 正文

C語言中含有if的宏定義詳解

2020-02-24 14:32:28
字體:
供稿:網(wǎng)友

關(guān)于C語言,武林小編我有自己的一些經(jīng)驗(yàn),這不,現(xiàn)在就給大家?guī)鞢語言中含有if的宏定義詳解,供大家交流學(xué)習(xí),下面就跟隨武林技術(shù)小編一起來看下。

含有if的宏定義
當(dāng)宏定義中含有 if 時(shí)
1) 定義如下宏
#define DC(p) if( foo(p) )fun(p)
用在下面的環(huán)境中
if(k>n)
DC(k);
else
DC(n);
宏替換后,如下
if(k>n)
if( foo(k) )
fun(k);
else
if( foo(n) )
fun( n );
可見, 原來的 if 和 else 不再配對(duì).
2) 為了避免這類問題, 我們可以將包含if語句的宏定義為一個(gè)整體.
#define DC(p) {if( foo(p) ) fun(p);}
但是, 替換后變?yōu)?br>if(k>n)
{
if( foo(k) )
fun(k);
};else ...
由于else前面多了個(gè)分號(hào), 編譯時(shí)會(huì)提示錯(cuò)誤沒有與else配對(duì)的if.
3)因?yàn)檫@些原因, 在宏定義中, 經(jīng)常會(huì)將語句序列放入 do{...}while(0)塊中.
如下
#define DC(p) do{( if( foo(p) ) fun(p); }while(0)
替換后
if(k>n)
do
{
if( foo(k) )
fun(k);
}while(0);
else
...
程序可以正常運(yùn)行
4)替換方案
a)采用 ? : 表達(dá)式

#define DC(p) ( (foo(p)) ? (fun(p)):0)
b)利用布爾運(yùn)算的短路徑求值屬性
#define DC(p) ( (foo(p)) && (fun(p), 1) )
參考書籍: <<代碼閱讀方法與實(shí)踐>>

以上就是武林小編分享的C語言中含有if的宏定義詳解,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 洛隆县| 万山特区| 舞钢市| 鹿泉市| 嘉禾县| 仁布县| 龙山县| 鹤壁市| 资阳市| 墨江| 甘肃省| 呼玛县| 石阡县| 宜城市| 霍城县| 甘谷县| 商水县| 甘肃省| 水富县| 任丘市| 新安县| 永安市| 绿春县| 洪雅县| 汽车| 商河县| 宜兰县| 韩城市| 子洲县| 精河县| 大埔县| 咸阳市| 丰都县| 阿坝县| 白河县| 大厂| 泉州市| 衡水市| 东阿县| 龙山县| 丹东市|