您的位置:首页 > 编程语言 > C语言/C++

关于C++全局变量声明的问题

2016-05-11 17:07 337 查看

关于C++全局变量声明的问题

在Visual Studio 2015中, 通过实际测试得出以下几点结论:

如果两个头文件中定义了相同名字的全局变量,当同时包含这两个头文件时会在编译阶段报重定义错误。

test1.h

#pragma once
int test;
int test1;


test2.h

#pragma once
int test;
int test2;


main.h

#include "test1.h"
#include "test2.h"
int main() {
return 0;
}


如果两个cpp文件中定义了相同名字的全局变量,在链接阶段会报变量重复定义的错误。

test1.h

#pragma once
int test1;


test1.cpp

int test;


test2.h

#pragma once
int test2;


test2.cpp

int test;


main.h

#include "test1.h"
#include "test2.h"
int main() {
return 0;
}


如果头文件里定义了一个全局变量,包含了这个头文件的源文件也定义了一个同名的全局变量,那么在编译这个源文件时会报重复定义的错误。

test1.h

#pragma once
int test;
int test1;


test1.cpp

int test;


main.h

#include "test1.h"
#include "test2.h"
int main() {
return 0;
}


如果一个头文件里定义了一个全局变量,另一个不包含这个头文件的源文件也定义了一个同名全局变量,各个文件都能编译通过,但在链接阶段会报多重定义的错误。

test1.h

#pragma once
int test1;


test1.cpp

int test;


test2.h

#pragma once
int test;
int test2;


main.h

#include "test1.h"
#include "test2.h"
int main() {
return 0;
}


正确的定义方法一般为在cpp源文件中定义,在头文件中以extern关键字声明,然后包含该头文件就可以了。

test.h

#pragma once
extern int test;


test.cpp

int test;


main.h

#include "test.h"
int main() {
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++-全局变量