今天寫快速排序,碰到乙個問題:使用了下面的巨集:
#define swap(a,b) \
int temp = a; \
a = b; \
b = temp
咋看沒有問題,但是在使用時a,不是乙個值而是乙個表示式
swap(v[++m], v[i]);
這樣在編譯器預處理的時候會展開為
int temp = v[++m]; v[++m] = v[i]; v[i] = temp;
m被加了兩次,導致錯誤。
對於巨集的使用,如果不打算改變巨集引數的值,可以在巨集開始的地方,儲存一邊巨集的值,避免重複計算,例如
#define max(a,b) \
a > b? a: b
如果傳入的a,b時fa().fb(),那麼至少有乙個函式計算了兩次,導致額外的計算。
完整的**如下
#include #include using std::vector;
using std::cout;
using std::endl;
#define swap(a,b) \
int temp = a; \
a = b; \
b = temp
void sort(vector& v, int beg, int end)
int flag = v[beg];
int m = beg;
for (int i = beg; i<=end; ++i)
}swap(v[m], v[beg]);
sort(v, beg, m-1);
sort(v, m+1, end);
return;
}void sort(vector&v)
templateint container_print(const t &c)
return 0;
}int main()
MFC中乙個危險的Bug
上次說日本海嘯警報的時候,程式出錯。在解析 的時候,發現了mfc中的乙個bug。一。問題的產生。這個程式,用來處理日本各種天氣預報資料,包括災害的預報。如果 颱風之類的自然災害到來,程式會把預報資料進行處理,生成相應的警報資訊,並在電視上面顯示滾動的字幕來提示。程式本身,是幾年前公司的其他人寫的。裡...
MFC中乙個危險的Bug
mfc中乙個危險的bug 上次說日本海嘯警報的時候,程式出錯。在解析 的時候,發現了mfc中的乙個bug。一。問題的產生。這個程式,用來處理日本各種天氣預報資料,包括災害的預報。如果 颱風之類的自然災害到來,程式會把預報資料進行處理,生成相應的警報資訊,並在電視上面顯示滾動的字幕來提示。程式本身,是...
由框架中乙個BUG引起的
今天加班在給new guys做培訓的時候,發生了乙個莫名其妙的問題,幾經周折,才發現是公司現有框架的乙個bug。xml converter valueobject objectid lib class com.icsc.tm.mscdao.tmjcs03vo type unique converte...