坑爹的宏語法...宏名字和括號間不能有空格!

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

#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’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章