c - ".global"的宏定义

标签 c macros

我有一个使用“.global”汇编语言代码的“c”程序。我的编译器不允许这样做,我需要忽略它,我尝试了以下操作:

#define .global //global

但这会产生编译器错误。我还可以使用其他选项吗?编译错误为:

“需要一个标识符”

最佳答案

您几乎肯定最终会编写自己的预处理脚本;如果您的源文件得到合理控制,这应该不会太困难。例如,如果您不在字符串文字或注释中使用 .global 构造,则执行以下操作就足够了:

sed  's/.global [_[:alpha:]][_[:alnum:]]*;//g'

(也许更多地关注空白的细节)。

<小时/>

您不能用宏创建注释。 (您也不能定义名称以 . 开头的宏,尽管我认为可能有一个编译器接受它作为扩展名。)

在翻译过程的第 3 阶段,注释被替换为空格。直到第 4 阶段才检查预处理器指令,此时所有注释都已消失。

所以两者没有区别

#define COMMENT //comment
#define COMMENT
<小时/>

标准引用:§5.1.1.2/1:

  • 源文件被分解为预处理标记7) 和空白字符序列(包括注释)。源文件不应以部分预处理标记或部分注释结尾。每条评论都被一个空格字符替换。...

  • 执行预处理指令,扩展宏调用,并执行 _Pragma 一元运算符表达式。...

  • 关于c - ".global"的宏定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32472949/

    相关文章:

    macros - Common Lisp 宏模式匹配

    c++ - C++ 中 ## 运算符的用途是什么,它叫什么?

    java - JNI - 如何将 'jint' 参数转换为 'unsigned int' C 类型值

    c - 触摸传感器不工作

    c - 为什么我不断收到分段转储?

    c - 行与列之间的端子间距

    c++ - 用 C/C++ 包装 Mac OS X 特定代码的宏

    Linux:使用鼠标加*键盘*修饰符模拟滚动

    c++ - 可变参数宏

    c++ - 庞大的宏定义重载