extern使用方法总结

学过编译原理基础的都知道,C++项目编译的过程先是编译单个.cpp文件得到.obj文件,然后再把.obj文件链接起来得到一个可执行文件。
所以在一个.cpp文件中定义的全局变量或者函数在另外一个.cpp文件中是不能访问的。为了在一个a.cpp文件中能访问另一个b.cpp文件中的变量或者函数,我们可以在a.cpp文件中用extern对函数或者变量声明。例如:
在print.cpp文件中

#include<iostream>
using namespace std;
void print(char *s)
{
	printf("The string is %s/n", s);
}
在extern.cpp文件中

#include "stdio.h"
#include<iostream>
extern void print(char *s);
int main(int argc, char* argv[])
{
	char *p = "hello world!";
	print(p);
	system("pause()");
	return 0;
}
程序运行结果:


extern关于变量的用法也差不多

在print.cpp中

int haha;
在extern.cpp中

#include<iostream>
using namespace std;
extern int haha;
int main(int argc, char* argv[])
{
	haha = 1;
	cout << haha << endl;
	system("pause()");
	return 0;
}
程序运行结果



如果我们不想在.cpp文件中进行变量或者函数的extern声明,我们可以在一个头文件中声明,然后在.cpp文件#include就可以了(也推荐这种做法)。

以变量的为例,

在print.cpp文件中

int haha;

在wo.h文件中

extern int haha;

在extern.cpp文件中

#include<iostream>
#include"wo.h"
using namespace std;
int main(int argc, char* argv[])
{
	haha = 1;
	cout << haha << endl;
	system("pause()");
	return 0;
}
程序运行结果

注:(对于函数,定义的时候可以加extern,此处仅表示该函数已经在其他地方用extern声明为整个工程范围内的全局函数,语法上并没有什么作用,可以理解为注释。

但对于变量,不能在定义的时候加extern,否则会出现链接时错误。我想其中的原因是函数的函数体是有{}的,所以加不加extern都可以知道是函数定义还是函数声明。但对于变量则不好区分,如果在定义的时候加了extern就会被编译器理解为声明,于是该变量就缺少了定义。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值