C++声明extern变量和extern函数的用法

目录

 一、 声明extern变量

1、 如何声明

2、在何处声明

3、在何处初始化

4、在何处调用

5、举例声明extern变量

(1)、声明extern变量的test.h文件

(2)、初始化extern变量的test.cpp文件

(3)、调用extern变量的main.cpp文件

二、声明extern函数

1、 如何声明

2、在何处声明

3、在何处定义

4、在何处调用

5、举例声明extern变量

(1)、声明extern函数的test.h文件

(2)、定义extern函数的test.cpp文件

(3)、调用extern函数的main.cpp文件

三、总结


        extern关键字可以用来声明变量和函数作为外部变量或者外部函数供其它文件使用。

 一、 声明extern变量

1、 如何声明

        在正常的变量声明前增加extern关键字。

2、在何处声明

        在头文件中声明extern变量。比如:test.h。在变量声明的时候不要赋值。

3、在何处初始化

        在与头文件名称相同的.cpp文件中定义,比如:test.cpp,test.cpp中必须引用test.h;

4、在何处调用

        在主文件中调用,比如:main.cpp,主文件可以不与test.h同名,但必须必须引用test.h。

        主文件一定不要引用test.cpp,否则出现警告:LNK2005、LNK1169;

5、举例声明extern变量

(1)、声明extern变量的test.h文件

/*extern*/
//声明外部变量
extern int a;
extern int b;

(2)、初始化extern变量的test.cpp文件

/*extern*/
#include "test.h"

//定义外部变量、外部变量初始化
int a = 520;
int b = 1314;

(3)、调用extern变量的main.cpp文件

/*extern*/
//使用外部变量
#include <stdio.h>
#include "test.h"
/*#include"test.cpp"*/	//不可以这样引用,否则警告LNK2005、LNK1169

int main(void)
{
	printf("a = %d , b = %d\n", a, b);

	return 0;
}
/*运行结果
a = 520 , b = 1314	*/

二、声明extern函数

1、 如何声明

        在正常的函数声明前增加extern关键字。

2、在何处声明

        在头文件中声明extern函数。比如:test.h,声明extern函数不要书写函数体的实现方法。

3、在何处定义

        在与头文件名称相同的.cpp文件中定义和实现函数体,比如:test.cpp,test.cpp中必须引用test.h;

4、在何处调用

        在主文件中调用,比如:main.cpp,主文件可以不与test.h同名,但必须必须引用test.h。

        主文件一定不要引用test.cpp,否则出现警告:LNK2005、LNK1169;比如:

已启动生成...
1>------ 已启动生成: 项目: Project1, 配置: Debug x64 ------
1>main.cpp
1>LINK : 没有找到 C:\Users\pc\Desktop\extern\Project1\x64\Debug\Project1.exe 或上一个增量链接没有生成它;正在执行完全链接
1>test.obj : error LNK2005: "int __cdecl add(int,int)" (?add@@YAHHH@Z) 已经在 main.obj 中定义
1>test.obj : error LNK2005: "int a" (?a@@3HA) 已经在 main.obj 中定义
1>test.obj : error LNK2005: "int b" (?b@@3HA) 已经在 main.obj 中定义
1>C:\Users\pc\Desktop\extern\Project1\x64\Debug\Project1.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
1>已完成生成项目“Project1.vcxproj”的操作 - 失败。

5、举例声明extern变量

(1)、声明extern函数的test.h文件

/*extern*/
//声明外部变量
extern int a;
extern int b;
//声明外部函数
extern int add(int a, int b);	//extern关键字可要可不要

(2)、定义extern函数的test.cpp文件

/*extern*/
#include "test.h"

//定义外部变量、外部变量初始化
int a = 520;
int b = 1314;

//定义外部函数。实现外部函数的方法
int add(int a, int b)
{
	return a + b;
};

(3)、调用extern函数的main.cpp文件

/*extern*/
//使用外部变量
#include <stdio.h>
#include "test.h"
/*#include"test.cpp"*/	//不可以这样引用,否则警告LNK2005、LNK1169

int main(void)
{
	printf("a = %d , b = %d\n", a, b);		//调用外部变量
	printf("add(a, b) = %d\n", add(a, b));	//调用外部函数
	return 0;
}
/*运行结果
a = 520 , b = 1314
add(a, b) = 1834	*/

三、总结

  •  要养成正规的编程习惯,变量、函数、结构体、类的声明要放在.h文件中,比如test.h;结构体和类体的实现可以放在test.h文件中,但不要初始化。声明外部变量、声明外部函数,等时必须使用extern关键字。
  • 把变量的初始化、函数方法的实现、结构体的实现、类体的实现放在另一个.cpp文件中,这个.cpp文件默认的要与.h文件同名,比如test.cpp。同时在test.cpp要引用test.h文件。声明外部变量、声明外部函数时必须使用extern关键字。初始化外部变量、定义外部函数,等的实现方法时不要重复使用extern关键字。
  • main.cpp负责变量的引用、函数的调用、结构体变量定义和结构体成员的调用,类对象的定义和类成员的调用;调用外部变量、外部函数时不需要使用extern关键字。main.cpp要引用test.h文件,一定不要引用test.cpp文件。
  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
C++中,使用extern声明可以在一个文件中调用其他文件中定义的函数,或者说将该函数的作用域扩展到本文件。extern声明的形式是在函数原型基础上加上关键字extern。在程序中经常需要调用其他文件中的外部函数,为了方便编程,C++允许在声明函数时省略extern关键字。例如,在主文件中可以使用extern声明来调用其他文件中定义的函数。\[1\] 举个例子,假设有一个test.cpp文件中定义了一个函数,我们可以在主文件中使用extern声明来调用这个函数。首先,在test.h文件中声明外部函数,然后在test.cpp文件中定义外部函数并进行初始化。最后,在主文件中使用extern关键字来调用外部函数。\[2\] 另外,C++中还有内部函数,也称为静态函数。使用内部函数可以使函数只局限于所在文件,如果在不同的文件中有同名的内部函数,它们互不干扰。通常将只能由同一文件使用的函数和外部变量放在一个文件中,并在它们前面加上static关键字使之局部化,其他文件不能引用这些函数变量。\[3\] #### 引用[.reference_title] - *1* *3* [简单讲解C++的内部和外部函数以及宏的定义](https://blog.csdn.net/weixin_39663258/article/details/117269869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C++声明extern变量extern函数用法](https://blog.csdn.net/wenchm/article/details/130765956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wenchm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值