某日, 寫了乙個簡單的內聯彙編指令碼, 死活編譯不過去, 和原版的彙編一點一點對比, 基本上都一樣了, 可就是別人寫的可以編譯過去, 我寫的就是編譯不過去.
彙編指令碼如下:
[cpp]
#undef byte_copy_fwd
#define byte_copy_fwd (dst, src, len) \
do while(0)
只好祭出beyond compare2
發現有如下不一致的地方:
第一行是別人的, 第二行是我的
發現巨集名字和()之間多了乙個空格, 去掉之, 編譯通過!
之前的報錯資訊如下, 希望這裡的報錯資訊對你有用.
memcpy.cpp:40: warning: left-hand operand of comma has no effect
memcpy.cpp:40: warning: right-hand operand of comma has no effect
memcpy.cpp:40: error: expected `;' before 『do』
巨集定義和括號
為了盡量避免邊際效應,巨集定義時常要注意括號的使用。例如在編寫乙個簡單的min巨集時,我們需要加上足夠括號才能保證結果盡可能的正確。define min x,y x y x y 但有些情況下,加上括號卻是 畫蛇添足 的。例如,用預處理指令 define宣告乙個常數,用以表明1年中有多少秒。defin...
點滴 巨集 引數加括號
define count x,y a b define count x,y a b 這兩者在 x 3 4 因為巨集替換其實就是文字的直接替換。least min p b 有問說這種會產生什麼區別?p b p b如果這兩者會有區別的話,是不是因為 和 的優先順序的問題?查了一下,果然是,這種題雖然說程...
巨集引數加括號的原因
加括號是為了處理表示式引數 即巨集的引數可能是個演算法表示式 時不出錯,因為巨集替換就是文字替換,所以如果有以下情況 define com a,b a b 那麼com 6 5,3 這個呼叫會怎麼替換呢?它會換成這樣 6 5 3 顯然這是和com巨集的意圖一致的,但是如是去掉了定義中括號,即寫成這樣 ...