C中含有 if 的巨集定義

2021-05-26 20:25:20 字數 768 閱讀 1225

含有if的巨集定義

當巨集定義中含有 if 時

1) 定義如下巨集

#define dc(p) if( foo(p) )fun(p)

用在下面的環境中

if(k>n)

dc(k);

else

dc(n);

巨集替換後,如下

if(k>n)

if( foo(k) )

fun(k);

else

if( foo(n) )

fun( n );

可見, 原來的 if 和 else 不再配對.

2) 為了避免這類問題, 我們可以將包含if語句的巨集定義為乙個整體.

#define dc(p)

但是, 替換後變為

if(k>n)

;else ...

由於else前面多了個分號, 編譯時會提示錯誤沒有與else配對的if.

3)因為這些原因, 在巨集定義中, 經常會將語句序列放入 dowhile(0)塊中.

如下#define dc(p) dowhile(0)

替換後if(k>n)

dowhile(0);

else

...程式可以正常執行

4)替換方案

a)採用 ? : 表示式

#define dc(p) ( (foo(p)) ? (fun(p)):0)

b)利用布林運算的短路徑求值屬性

#define dc(p) ( (foo(p)) && (fun(p), 1) )

類中含有虛函式的剖析

1.源 include using namespace std class base public class der public base public void test int main 執行後的結果 先來看看base類建立的物件有多大 然而用sizeof b 時結果卻為4 這是什麼情況 用...

c 標準庫中,含有鍊錶的類list

lists將元素按順序儲存在鍊錶中.與 向量 vectors 相比,它允許快速的插入和刪除,但是隨機訪問卻比較慢.stl中 end 指向的總是無效值,取值都用迭代器,用法跟指標差不多。assign 給list賦值 back 返回最後乙個元素 begin 返回指向第乙個元素的迭代器 clear 刪除所...

C 巨集定義 巨集定義求面積

學過c語言的讀者,對巨集定義應該不陌生,同樣在c 中,也可以用巨集定義命令將乙個指定的識別符號來代表乙個字串,巨集定義的作用一般是用乙個短的名字代表乙個長的字串。一般形式為 define 識別符號 字串定義pi的符號常量 define pi 3.14在c 中還可以用 define命令定義帶引數的巨集...