巨集名字和括號間不能有空格

2021-12-29 23:32:49 字數 561 閱讀 5036

某日, 寫了乙個簡單的內聯彙編指令碼, 死活編譯不過去, 和原版的彙編一點一點對比, 基本上都一樣了, 可就是別人寫的可以編譯過去, 我寫的就是編譯不過去.

彙編指令碼如下:

[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巨集的意圖一致的,但是如是去掉了定義中括號,即寫成這樣 ...