static 变量后跟 extern 在同一个文件中

static variable followed by extern in the same file

以下代码编译和执行都很好。 static int a 之后的 extern int a 语句到底是什么意思? 请注意,如果我在 extern int a 之后写 static int a,编译器会抛出错误 tests.cpp:6: error: a was declared extern and later static

#include<iostream>
//#include "testh.h"
using namespace std;

static int a;
extern int a;
int main()
{
        int a;
        a=3;
        cout<<a<<endl;
        cout<<::a<<endl;
        return 0;
}

您可以声明变量 static 然后 extern,但不能先 extern 然后 static。结果就是全局a还是有内部链接的。在语言标准文档 [dcl.stc] 节中有一个非常相似的示例(使用 b 作为变量名),说明了这一点。