C++extern全局变量

C++extern全局变量

@2018-11-15

用C++编写多文件时一直有个疑惑, 就是多个文件能否在一个头文件当中声明全局变量, 然后其他文件可以一起用. 但是以前没有研究过, 这样子做总会出错, 今天来总结一下.
声明与定义:
对变量来讲, 一般情况两者是没有区别的, 声明就是让编译器知道有这个东西存在, 别让它给你在编译时报错, 定义是给这个东西分配特定的内存空间.
官方解释:

声明一个变量只是将变量名标识符的有关信息告诉编译器,使编译器“认识”该标识符,但声明不一定引起内存的分配。而定义变量意味着给变量分配内存空间,用于存放对应类型的数据,变量名就是对相应的内存单元的命名。

在C++程序中,大多数情况下变量声明也就是变量定义,声明变量的同时也就完成了变量的定义,只有声明外部变量时例外。

今天我们要说的就是上面的外部变量, 也就是多文件下共同使用的变量.
我们引入extern的概念.
声明变量:

extern int i;

定义变量:

int i = 1;

假设我们现在一个头文件, 两个cpp文件, 分别是"hello.hpp", “hello.cpp”, “main.cpp”.

//hello.hpp
#ifndef _HELLO_HPP
#define _HELLO_HPP
extern int test;
#endif
//hello.cpp
#include"hello.hpp"
int test = 5;
//main.cpp
#include<iostream>
#include"hello.hpp"
//extern int test;
int main()
{
	std::cout << test << std::endl;
	return 0;
}

hello.hpp头文件中extern声明了一个变量test, hello.cpp源文件中定义了这个变量, 给它分配了内存空间, main.cpp中没有声明(注释掉了)直接调用变量test, 两个源文件都include了hello.hpp.
大家猜测一下这种会不会报错?

根据测试, 在ubuntu g++编译和windows visual studio 编译下不会报错, 在Dev C++上面报错了(谜之错误), 反正我现在也不用Dev C++, 这个错误也没必要深究, 总之, 上面这段代码是正确的, 不管main.cpp中有没有注释掉extern int test; 这段代码都是可以编译并且运行的, 也就是说, 如果我们以后要使用多文件共享几个全局变量, 就可以仿照上面, 在头文件中extern声明一个变量, 然后在其中一个cpp中定义, 分配给它内存, 其他的cpp中为了程序的可读性, 最好还是加上extern声明.(要不然不知道变量从哪里蹦出来的)
归根到底, 还是变量的重定义问题, 变量只能定义一次, 但是可以声明多次, 多次定义的话就会出错, 我们在编写多文件时一定要注意这点.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值