C中这段代码的含义是什么?

时间:2012-06-15 20:11:53

标签: c bison

在一些Bison代码中,以下行是什么意思?

#define YY_DECL extern "C" int yylex();

我知道#define命令,但我不了解整个命令。

3 个答案:

答案 0 :(得分:6)

这意味着YY_DECL将扩展为

extern "C" int yylex();

这实际上是C ++,而不是C;当您使用C ++编译器编译此文件时,它声明函数yylex必须使用“C linkage”进行编译,以便C函数可以毫无问题地调用它。

如果你不用C ++编程,这在很大程度上与你无关,但你可能会在C头文件中遇到类似的声明,试图与C ++兼容的库。 C和C ++可以在一个程序中混合使用,但它需要这样的函数声明才能很好地协同工作。

#ifdef __cplusplus周围可能有一个#define;这是一个特殊的宏,用于表示C ++编译器的编译。

答案 1 :(得分:3)

#define YY_DECL extern "C" int yylex();

定义一个宏YY_DECL代表函数yylex的声明,该函数在C ++程序中具有'C'链接,不带参数并返回int

答案 2 :(得分:2)

#define - 一个预处理器指令,为预处理器声明一个新变量。但你知道的。

YY_DECL - 变量的名称。

extern "C" - 告诉编译器以下代码是纯C语言.C和C ++之间存在很多差异,并且通常不能混合使用C和C ++代码。如果将此包含在声明中,则允许您在C ++中使用C.编辑:代码实际上不需要是纯C,但它将被链接。但最常见的使用模式是使C代码与C ++兼容。感谢@larsmans的纠正。

int yylex() - 一个名为yylex的函数的声明,其中包含未定义的参数数量和返回类型int

因此整个命令将C函数声明分配给预处理器变量。