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

 更新时间:2024年11月05日 10:33:24   作者:wenchm  
extern关键字可以用来声明变量和函数作为外部变量或者外部函数供其它文件使用,所以本文给大家介绍了C++声明extern变量和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文件。

以上就是C++声明extern变量和extern函数的用法的详细内容,更多关于C++声明extern变量和函数的资料请关注脚本之家其它相关文章!

相关文章

  • C++实现马踏棋盘(骑士周游)

    C++实现马踏棋盘(骑士周游)

    这篇文章主要为大家详细介绍了C++实现马踏棋盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C语言之通讯录的模拟实现代码

    C语言之通讯录的模拟实现代码

    这篇文章主要介绍了C语言之通讯录的模拟实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C++实现哈希桶的详细教程

    C++实现哈希桶的详细教程

    这篇文章主要介绍了C++实现哈希桶的详细教程,哈希的底层是一个vector的数组,数组中的每个节点都有一个pair类型的数据,文中通过代码示例和图文讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-06-06
  • C语言中栈和队列实现表达式求值的实例

    C语言中栈和队列实现表达式求值的实例

    这篇文章主要介绍了C语言中栈和队列实现表达式求值的实例的相关资料,这里主要是对数据结构中栈和队列的理解和应用,需要的朋友可以参考下
    2017-08-08
  • C语言的循环小练习详解

    C语言的循环小练习详解

    这篇文章主要为大家介绍了C语言的循环小练习,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C++中try throw catch异常处理的用法示例

    C++中try throw catch异常处理的用法示例

    这篇文章主要给大家介绍了关于C++中try throw catch异常处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • C++找出字符串中出现最多的字符和次数,时间复杂度小于O(n^2)

    C++找出字符串中出现最多的字符和次数,时间复杂度小于O(n^2)

    今天小编就为大家分享一篇关于C++找出字符串中出现最多的字符和次数,时间复杂度小于O(n^2),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • C语言位运算和sizeof运算符详解

    C语言位运算和sizeof运算符详解

    这篇文章主要介绍了C语言位运算和sizeof运算符详解的相关资料,这里提供了详细的知识要点,并附简单代码示例,需要的朋友可以参考下
    2016-11-11
  • C++之vector内存释放原理

    C++之vector内存释放原理

    这篇文章主要介绍了C++之vector内存释放原理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C++ 使用模板实现一个List的实例

    C++ 使用模板实现一个List的实例

    这篇文章主要介绍了 C++ 使用模板实现一个List的实例的相关资料,需要的朋友可以参考下
    2017-05-05

最新评论