2013-10-29 65 views
1

我使用C++項目,有包括交流頭文件ira.h如下:語法錯誤:__asm__( 「some_code」 ::: 「CC」)

#ifdef __cplusplus 
    extern "C" { 
#endif 

extern inline void disable_irqs() { 
    __asm__ __volatile__("\torc #0x80,ccr\n":::"cc"); 
} 

extern inline void enable_irqs() { 
    __asm__ __volatile__("\tandC#0x7f,ccr\n":::"cc"); 
} 

#ifdef __cplusplus 
} 
#endif 

當我編譯它,我錯誤如下:

/usr/local/bin/h8300-hitachi-hms-g++ -DCXX -fno-rtti -fno-exceptions -O2 -fno-builtin -fomit-frame-pointer -Wall -I/brickos/include -I/brickos/include/lnp -I. -I/brickos/boot -c rcx1.C -o rcx1.o 
In file included from PowerFunctionsController.H:32, 
      from rcx1.H:27, 
      from rcx1.C:21: 
/brickos/include/lnp/sys/irq.h: In function `void disable_irqs(...)': 
/brickos/include/lnp/sys/irq.h:99: parse error before `::' 
/brickos/include/lnp/sys/irq.h: In function `void enable_irqs(...)': 
/brickos/include/lnp/sys/irq.h:104: parse error before `::' 
make: *** [rcx1.o] Error 1 

我該怎麼辦?

+1

有什麼理由將格式化字符添加到你的內聯程序集中?一旦編譯完成,你的'\ t'和'\ n'字符就無關緊要了。 –

+0

我不知道,這是由brickOS開發人員提供的... – mikezang

+0

我不確定你的平臺上有什麼「cc」,但是如果它沒有做任何事情,你可以簡單地刪除':::「 cc「'部分,因爲您不使用可選參數。 –

回答

7

GCC解析字符序列作爲::: 運算符:範圍操作符::和冒號:。這是因爲它匹配解析關鍵字和運算符時可以使用的最長序列。如果你不希望你需要在每個冒號之間加一個空格,就像: : :