在任何情况下,应该或可以在头文件中使用C静态关键字作为变量吗?

时间:2019-06-21 09:31:11

标签: c static header-files

We can assumestatic关键字不得在头文件-中用于变量

  

头文件仅包含extern个变量声明-绝不包含static或不合格的变量定义。

在头文件中是否应该或可以将C static关键字用于变量吗?为什么?

2 个答案:

答案 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

此类数据的有用性值得商,,但我已经看到一家大公司生产的代码中使用了此类构造...