什么时候在全局变量之前使用static关键字?
有人可以解释什么时候应该在全局变量或常量在头文件中定义之前使用static关键字吗?
例如,让我说我有一个头文件的行:
const float kGameSpriteWidth = 12.0f;
应该在const
前面有static
吗? 什么是使用static
一些最佳实践?
static
呈现文件的局部变量,这通常是一件好事,例如参见这个维基百科条目。
你不应该在头文件中定义全局变量。 您应该在.c源文件中定义它们。
如果全局变量仅在一个.c文件中可见,则应声明它是静态的。
如果要在多个.c文件中使用全局变量,则不应将其声明为静态。 相反,您应该在需要它的所有.c文件包含的头文件中声明它为extern。
例:
example.h文件
extern int global_foo;
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;
}
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;
}
是的,使用静态
除非需要从不同的.c
模块引用对象,否则请始终在.c
文件中使用静态。
切勿在.h
文件中使用静态,因为每次包含它时都会创建一个不同的对象。
上一篇: When to use static keyword before global variables?
下一篇: what should i use with a c++ class, with or without "new"?