我正在尝试使用pycparser解析C文件的语法。我通过预处理器发送C文件,然后发送预处理器的输出以由pycparser
解析。以下代码位于其中一个C文件中......
extern "asm"
{
extern void ASM_Function(void);
}
pycparser
抛出异常告诉我这不是有效的C语法。查看C BNF关键字extern
不允许字符串文字在其前面。我在阅读BNF时是对的吗?这个extern功能是在更高版本的C中添加还是特定于语法编译器?
答案 0 :(得分: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调用约定。
编辑:更正了我的帖子。