[英]extern function prototype and static definition
我正在努力使FreeGLUT可以在OSX上構建,並且正在遇到同一問題的許多實例。 許多功能僅存在於.c文件中。
這是一個例子
extern void fghRestoreState( void );
static void fghRestoreState( void ){...}
我對C的了解有限,但是編譯器錯誤似乎很有意義:
src/Common/freeglut_gamemode.c:252: error: static declaration of ‘fghRestoreState’ follows non-static declaration
src/Common/freeglut_gamemode.c:43: error: previous declaration of ‘fghRestoreState’ was here
我的問題是,他們有任何理由設置這種方式嗎? 它可以在其他平台上正確編譯嗎?
該函數前面的關鍵字extern
表示外部鏈接 。
它使您可以將其他轉換單元中定義的功能用於自己的源文件。
簡而言之,它使您可以在不包含fghRestoreState()
聲明的另一個文件中使用它。
而關鍵字static
表示Internal Linkage
,即該函數僅在定義和聲明該文件的文件中可見。
用簡單的話說,它告訴編譯器我將僅在此源文件中使用此功能,因此將其對我項目中的所有其他文件隱藏。
由於出現上述錯誤,因此將兩個關鍵字一起使用會產生沖突。
您不能告訴編譯器使所有文件都能看到此功能(使用extern
)並再次告訴它,將其對所有其他文件隱藏(使用static
)。
因此,請根據您對函數的使用情況選擇關鍵字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.