2

我正在尝试使用pycparser解析 C 文件的语法。我通过预处理器发送 C 文件,然后将预处理器的输出发送给pycparser. 以下代码位于其中一个 C 文件中...

extern "asm"
{
    extern void ASM_Function(void);
}

pycparserthrows 和异常告诉我这不是有效的 C 语法。查看C BNF关键字extern不允许字符串文字在其前面。我在阅读 BNF 时是正确的吗?这个外部功能是在更高版本的 C 中添加的,还是这个语法编译器特定的?

4

1 回答 1

0

它看起来像一个编译器扩展。你知道代码最初是为哪个编译器编写的吗?

大多数编译器支持通过用以下方式包装函数声明来声明 C 调用约定:

#ifdef __cplusplus
extern "C" {
#endif

    // functions that use C calling convention.
    // are declared here.

#ifdef __cplusplus
} /* extern "C" */
#endif

该代码似乎声明了一个名为 ASM_Function 的外部定义的汇编函数。如果您知道汇编函数所期望的调用约定是什么,则可以重写它。

extern "C" 是一个 C++ 构造,用于声明不使用名称修饰并将使用 cdecl 调用约定的函数。

编辑:更正了我的帖子。

于 2015-06-22T22:20:28.410 回答