extern int eg_i = 0;
int main(){
++eg_i; // 1
return 0;
}
令人惊讶的是,这段代码没有引发编译错误。
因为如果在初始化时声明了一个extern变量,那么它也会被作为变量的定义。
我不知道extern关键字有例外。
发布于 2022-08-28 13:37:49
本声明
extern int eg_i = 0;
是变量eg_i
的定义,因为存在一个初始化器。
所以没有问题。
来自C++ 17标准(6.1声明和定义)
2声明是一个定义,除非
(2.2) -它包含外部说明符(10.1.1)或连接规范26 (10.5),既不包含初始化程序,也不包含函数体,
顺便说一句,函数test
中似乎有排印。它应该看起来像
void test(){
++sgi;
++egi
++eg_i;
}
https://stackoverflow.com/questions/73522436
复制