头文件中的静态const变量声明

Mic*_*hał 13 c compilation header-files

如果我在头文件中声明静态const变量,如下所示:

static const int my_variable = 1;
Run Code Online (Sandbox Code Playgroud)

然后将这个标题包含在多个.c文件中,编译器会为每个文件创建新实例,还是"智能",足以看到它const并且只为所有文件创建一个实例?

我知道我可以将它设置为extern并在.c包含此标题的文件中定义它,但这是我不想做的.

Dev*_*lar 14

我在这里详细回答了这个问题.这个答案适用于C++,但它也适用于C语言.

翻译单元是单独的源文件.每个翻译单元包括您的标题将"看到"a static const int.的static,在这种情况下,是指的范围my_variable仅限于翻译单元.所以,你最终有一个单独 my_variable的每个翻译单元(" .c文件").

编译器不会"智能"为所有文件只创建一个实例,它会有问题,因为你明确告诉它不要这样做(static).

  • `extern` 版本有一个不幸的特性,你不能让其他 TU 看到这个值。 (2认同)
  • @JensGustedt:您的意思是编译时可见,而不是运行时可见(“extern”变量肯定是)。那是正确的。删除了那个旁注。 (2认同)