extern后跟字符串文字

时间:2015-06-22 21:32:40

标签: c syntax bnf pycparser

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

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

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

1 个答案:

答案 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调用约定。

编辑:更正了我的帖子。