这是我的代码:
/// common.h
static int sgi = 0;
extern int egi;
/// main.cpp
#include "common.h"
int egi = 0;
extern int eg_i = 0;
void test(){
++sgi;
+++egi
++egi;
}
int main(){
test();
test();
test();
}
根据我在谷歌上搜索到的各种答案,这段代码必须存在链接问题,因为'extern int eg_i = 0'没有'目标'到'链接'。
但是 Visual Studio 2017 没有显示错误,并且每次调用“test”时“eg_i”都会增加。
这是“未定义的行为”还是我在这里遗漏了一些东西?
本声明
extern int eg_i = 0;
是变量
eg_i
的定义,因为存在一个初始值设定项。
所以没有问题。
来自 C++ 17 标准(6.1 声明和定义)
2 声明就是定义,除非
(2.2) — 它包含 extern 说明符 (10.1.1) 或 连接规范26(10.5)并且既不是初始化程序也不是 函数体,
顺便说一句,函数中似乎有拼写错误
test
。它应该看起来像
void test(){
++sgi;
++egi
++eg_i;
}