[英]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.