關(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í)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
|
新聞熱點(diǎn)
疑難解答
圖片精選