某日, 寫了一個簡單的內聯匯編腳本, 死活編譯不過去, 和原版的匯編一點一點對比, 基本上都一樣了, 可就是別人寫的可以編譯過去, 我寫的就是編譯不過去.
匯編腳本如下:
[cpp]
#undef BYTE_COPY_FWD
#define BYTE_COPY_FWD (dst, src, len) \
do { \
asm volatile( \
"cld\n" \
"rep\n" \
"movsb" : \
"=D" (dst), "=S" (src) : \
"0" (dst), "1" (src), "c" (len) : \
"memory"); \
} 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’