含有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命令定義帶引數的巨集...