header 文件中的静态常量变量声明

Static const variable declaration in a header file

如果我在 header 文件中这样声明静态常量变量:

static const int my_variable = 1;

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

我知道我可以将它设为外部并在包含此 header 的 .c 文件之一中定义它,但这是我尽量不做的事情。

我猜它只会为所有文件创建一个实例。但是你可以通过在不同的文件中调用它来验证它并检查它的值

如果您使用该对象的地址 - 编译器肯定会为每个翻译单元创建一个实例。如果您只使用值 - 它可能足够聪明,可以完全避免创建对象 - 值将在需要的地方内联。

我详细回答了这个问题 here。这个答案适用于 C++,但它也适用于 C。

翻译单元是单个源文件。包括您的 header 在内的每个翻译单元将 "see" 一个 static const int。在这种情况下,static 意味着 my_variable 的范围仅限于翻译单元。因此,对于每个翻译单元(“.c 文件”),您最终会得到一个 separate my_variable

编译器不会"smart"为所有文件只创建一个实例,它会错误,因为你显式[=26] =] 告诉它不要这样做 (static)。