可以在.h文件中声明静态全局变量吗?

bat*_*man 13 c c++ static global extern

static关键字将全局变量的范围限制为该转换单元.如果我 static int x在.h文件中使用并且每隔一个文件包含该.h文件,它们是否都属于同一个翻译单元?那么,到处都不会出现x吗?那么静电的作用是什么?

另外,有没有使用static const int x,其中x是一个全局变量?默认情况下,并非所有const全局变量都是静态的 并且const变量的范围仅限于TU,即使它被限制在文件中的for循环中?

Ale*_*tov 36

如果你写

static const int x
Run Code Online (Sandbox Code Playgroud)

.h文件中,然后#include -s这个.h的每个翻译单元都有自己的私有变量x.

如果您希望每个人都能看到1个全局变量,那么您应该编写

extern const int x;
Run Code Online (Sandbox Code Playgroud)

.h文件中

const int x = ...;
Run Code Online (Sandbox Code Playgroud)

在其中一个.cpp文件中.

如果你想让一个静态const int只对一个翻译单元可见 - 根本不要在.h文件中提及它.


Hei*_*bug 6

如果我在.h文件中使用static int x并且每隔一个文件包含该.h文件,它们是否都属于同一个翻译单元?

如果将某些东西声明为静态(不在类中,对于类static关键字具有不同的语义),则不能在其TU之外看到该静态变量.因此将它放在头文件中将导致包含该头的每个TU具有该静态变量的不同私有副本.

并且const变量的范围仅限于TU,即使它被限制在文件中的for循环中?

没有.即使对于静态const值,范围也由它的声明决定.所以范围将受到括号的限制.