使用现有关键字的优点是不会在语言中添加新关键字,这可能会破坏现有程序.它可能令人困惑,但它被认为是一种"较小的邪恶".
我假设你考虑使用static来定义在函数调用之间保持其值的变量是自然的.
考虑以下:
void func() {
    static int x;
}
与
int x;
void func() {
}
从func观点来看,x两种情况都表现相同.连续调用之间的值仍然存在.两者之间的区别是谁还能看到x.在第一个,没有人可以.在第二,每个人都可以.
该概念扩展到全局范围内的静态变量.如果你只是声明一个变量,那么每个人都可以看到它.但是如果你声明该变量是静态的,那么只有那个文件可以看到它.显然,你必须考虑到没有额外的范围来限制可见性,但这个想法就在那里.
C++中关于静态成员的附加含义也与原始示例直接类似.由类的所有实例共享的单个变量.
static是一个存储说明符。“静态”这个词的意思是不变的。“存储”是指对象在内存中的位置,即它的地址。
具有存储空间的对象static驻留在恒定地址处。
恰巧一个有extern存储空间的对象也有一个常量地址。由于 C 和 C++ 程序的链接方式,这是必要的。因为extern它恰好是最不令人惊讶的行为,所以它也是默认行为。
如果您将其视为extern之上的额外功能static,我认为这更有意义。声明一个函数有点愚蠢static,因为在任何完全编译的语言中都没有其他选择,但函数的地址是静态的,即使它不是外部可见的。
那么,真正不一致的部分是必须声明在不同编译单元之间共享的类成员static,而不是extern\xe2\x80\xa6