关于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++第五次上机实验——教师干部类
- C++实现双链表
- C++实现双链表
- C++实现双链表
- 基于C语言EOF与getchar()的使用详解
- 第7周 C语言程序设计(新2版) 练习1-13 打印输入单词长度的直方图(水平与垂直)
- 栈的测试--四则运算表达式求值(C语言)
- C++程序设计语言练习5.1
- C语言 文件操作12--文件加密
- C++中的vector容器对象学习笔记
- C++ typedef用法小结
- iOSDay09C语言函数指针
- iOSDay08之C语言内存管理
- iOSDay07之C语言指针
- 《C程序设计语言》读书笔记及C语言知识备忘
- iOSDay05C语言函数
- iOSDay04C语言数组
- iOSDay03C语言循环结构
- iOSDay02C语言分支结构
- c++ 名字查找