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).