簡體   English   中英

C中這段代碼的含義是什么?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM