【问题标题】:Syntax error in: __asm__ ("some_code":::"cc")语法错误:__asm__ ("some_code":::"cc")
【发布时间】:2013-10-29 12:38:14
【问题描述】:

我用C++做项目,里面有一个c头文件ira.h,如下:

#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

我能做什么?

【问题讨论】:

  • 您是否出于某种原因向内联程序集添加格式字符?一旦编译完成,您的 \t\n 字符就变得无关紧要了。
  • 不知道,这个是brickOS开发者提供的……
  • 我不确定“cc”在您的平台上做了什么,但如果它没有做任何事情,您可以简单地删除 :::"cc" 部分,因为您没有使用可选参数。
  • @ZacHowland:如果您要求编译器生成程序集,那么程序集块的内容最终会逐字输出(在操作数替换之后)。格式化字符可以改善输出(尽管它们显然不会改善源)。
  • @MikeSeymour 如果我理解正确,brickOS 开发人员会吐出包含格式字符的基于文本的程序集?

标签: c++ syntax-error


【解决方案1】:

GCC 将字符序列::: 解析为两个 运算符:作用域运算符:: 和冒号:。这是因为它在解析关键字和运算符时匹配最长的序列。如果您不想在每个冒号之间添加一个空格,例如: : :

【讨论】:

    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2021-08-21
    • 2015-08-23
    相关资源
    最近更新 更多