有人可以解释你应该在头文件中定义的全局变量或常量之前使用static关键字吗?
例如,假设我有一个带有该行的头文件:
const float kGameSpriteWidth = 12.0f;
Run Code Online (Sandbox Code Playgroud)
它应该static在前面const吗?使用哪些最佳做法static?
Tom*_*icz 91
您不应在头文件中定义全局变量.您应该在.c源文件中定义它们.
如果要在一个.c文件中只显示全局变量,则应将其声明为静态.
如果要在多个.c文件中使用全局变量,则不应将其声明为静态.相反,你应该在所有需要它的.c文件所包含的头文件中声明它.
例:
example.h文件
extern int global_foo;
Run Code Online (Sandbox Code Playgroud)foo.c的
#include "example.h"
int global_foo = 0;
static int local_foo = 0;
int foo_function()
{
/* sees: global_foo and local_foo
cannot see: local_bar */
return 0;
}
Run Code Online (Sandbox Code Playgroud)bar.c
#include "example.h"
static int local_bar = 0;
static int local_foo = 0;
int bar_function()
{
/* sees: global_foo, local_bar */
/* sees also local_foo, but it's not the same local_foo as in foo.c
it's another variable which happen to have the same name.
this function cannot access local_foo defined in foo.c
*/
return 0;
}
Run Code Online (Sandbox Code Playgroud)Dig*_*oss 22
.c除非您需要从其他.c模块引用对象,否则始终在文件中使用静态.
永远不要在.h文件中使用静态,因为每次包含它时都会创建一个不同的对象.
头文件的经验法则:
extern int foo;并在单个源文件中放置相应的初始化,以获得跨翻译单元共享的可修改值static const int foo = 42;得到一个常数,可内联static 在全局变量之前意味着无法从定义它的编译模块外部访问该变量。
例如,假设您想访问另一个模块中的变量:
foo.c
int var; // a global variable that can be accessed from another module
// static int var; means that var is local to the module only.
...
bar.c
extern int var; // use the variable in foo.c
...
Run Code Online (Sandbox Code Playgroud)
现在,如果您声明var为静态,则不能从foo.c编译到的模块之外的任何地方访问它。
请注意,模块是当前的源文件,加上所有包含的文件。即您必须分别编译这些文件,然后将它们链接在一起。
| 归档时间: |
|
| 查看次数: |
89624 次 |
| 最近记录: |