[英]What's meaning of this code in C?
在一些Bison代码中,以下行是什么意思?
#define YY_DECL extern "C" int yylex();
我知道#define
命令,但我不明白整个命令。
这意味着YY_DECL
将扩展到
extern "C" int yylex();
这实际上是C ++,而不是C; 当您使用C ++编译器编译此文件时,它声明必须使用“C linkage”编译函数yylex
,以便C函数可以毫无问题地调用它。
如果你不用C ++编程,这在很大程度上与你无关,但你可能会在C头文件中遇到类似的声明,试图与C ++兼容的库。 C和C ++可以在一个程序中混合使用,但它需要这样的函数声明才能很好地协同工作。
这个#define
周围可能有一个#ifdef __cplusplus
; 这是一个特殊的宏,用于表示C ++编译器的编译。
#define YY_DECL extern "C" int yylex();
定义一个宏YY_DECL
代表一个函数yylex
的声明,它在C ++程序中具有'C'链接,不带参数并返回int
。
#define
- 一个预处理器指令,为预处理器声明一个新变量。 但你知道。
YY_DECL
- 变量的名称。
extern "C"
- 告诉编译器下面的代码是纯C的.C和C ++之间有很多区别,一般不能混合使用C和C ++代码。 如果将此包含在声明中,则允许您在C ++中使用C. 编辑:代码实际上不需要是纯C,但它将被链接。 但最常见的使用模式是使C代码与C ++兼容。 谢谢@larsmans的纠正。
int yylex()
- 一个名为yylex
的函数的声明,带有未定义的参数个数,返回类型为int
因此整个命令将C函数声明分配给预处理器变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.