Kyl*_*yle 1 c macos gcc freeglut
我正在努力让FreeGLUT在OSX上构建,并且遇到了同样问题的许多实例.许多功能仅存在于.c文件中.
这是一个例子
extern void fghRestoreState( void );
static void fghRestoreState( void ){...}
Run Code Online (Sandbox Code Playgroud)
我对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
Run Code Online (Sandbox Code Playgroud)
我的问题是,他们是否有任何理由这样设置?它会在其他平台上正确编译吗?
extern函数前面的关键字表示外部链接.
它使您能够将其他翻译单元中定义的功能用于您自己的源文件.
简单来说,它使您能够fghRestoreState()在另一个不包含声明的文件中使用它.
然而,关键字static意味着一个Internal Linkage,即该函数应仅在其定义和声明的文件中可见.
简单来说,它告诉编译器我将仅在此源文件中使用此函数,因此将其隐藏在项目中的所有其他文件中.
如上所述的错误在将两个关键字一起使用时存在冲突.
您无法告诉编译器启用所有文件以查看此功能(使用extern)并再次告诉它,将其从所有其他文件中隐藏(使用static).
因此,请根据您对函数的使用情况选择关键字.
| 归档时间: |
|
| 查看次数: |
3169 次 |
| 最近记录: |