在C++中,我声明并初始化了没有“目标”的“外部变量”,但没有错误[重复]

问题描述 投票:0回答:1

这是我的代码:

/// 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”都会增加。

这是“未定义的行为”还是我在这里遗漏了一些东西?

c++ variables declaration definition extern
1个回答
1
投票

本声明

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.