We can assume,static
关键字不得在头文件-中用于变量。
头文件仅包含
extern
个变量声明-绝不包含static
或不合格的变量定义。
在头文件中是否应该或可以将C static
关键字用于变量吗?为什么?
答案 0 :(得分:4)
我仅在头文件中使用static
来定义常量。示例:
MyProject.h
static const int DebugLevel = 3;
Module.c
int foo(int x)
{
if (DebugLevel>2)
printf("foo(int x) called with x=%d\n", x);
...
}
这种方法的优点:
const
可使编译器优化if语句。 printf调用也可能会被删除。static
可使编译器完全优化该变量,而不会浪费内存。答案 1 :(得分:3)
特定于翻译单元的信息(即,C源文件)信息必须是每个编译的目标文件的一部分,但由于某些原因,每个输入源文件都需要不同。 / p>
例如,用于跟踪特定对象文件来源的调试信息或构建信息。也许某个组织希望将版权信息直接嵌入每个目标文件中。
例如,一个“ buildinfo.h”文件:
#ifndef BUILDINFO_H_INCLUDED
#define BUILDINFO_H_INCLUDED
static char my_org_copyright[] = "Copyright ...";
static char my_org_build_info[] = "Compiled on " __DATE__ "@" __TIME__;
#endif
此类数据的有用性值得商,,但我已经看到一家大公司生产的代码中使用了此类构造...