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