C/C++中的 extern 和extern“C“关键字详解(通俗易懂)

2024-06-01 1698阅读

前言

1、C/C++ extern关键字用法

C/C++中的 extern 和extern“C“关键字详解(通俗易懂)
(图片来源网络,侵删)

2、extern "C"用法

正文

1、extern关键字

extern其实就是一个声明,明确指出一个语句是声明,比如extern int i ;这是声明变量i,而不是定义i,定义i则是int i(声明不开辟内存空间,而定义是要开辟内存空间的)

使用场景1:(适用于简单项目,几个文件之间的调用)

extern可以声明一个变量,表示该变量来自其他文件,在此文件中可以被访问。

比如,目前创建了两个c文件,分别是test.c和main.c,如果在main.c中想获取test.c中的i变量,则只要在main.c的文件中加上这么一行:extern int i

//test.c文件
int i =5;
//main.c文件
#include 
extern int i;
int main()
{
	printf("i=%d\n",i);
    return 0;
}

使用场景2:适合用于大工程

假如我一个大工程,这个工程由超级多的文件,这些文件假如都要访问test.c文件的 变量 i,那么,只能在这些文件中,每个文件的开头都 声明变量 i,并且,假如我的test.c,不止一个定义一个变量i,有好多其他变量呢?在其他文件访问时候,都要声明好多变量,这会使得书写难度很繁琐,并且维护成本也大。

所以,可以把声明语句放到一个头文件中去使用,即定义一个test.h的头文件,在该头文件中添加声明,然后当有其他文件需要调用这些变量时,之间调用此头文件即可。

//test.c文件
int i = 5;
int b = 6;
int b = 7;
//test.h
extern int i = 5;
extern int b = 6;
extern int b = 7;
//main.c文件
#include 
#include "test.h"
//extern int i;不再需要用此方式,改为调用test.h头文件即可
int main()
{
	printf("i=%d\n",i);
    return 0;
}

2、extern “C” 用法

在C++中,extern "C"修饰的语句是为了编译器按照c的方式去进行编译的,为什么需要这样呢,是因为,如果在cpp文件中调用了c函数,那么就需要对这些c函数进行extern "C"操作,从而在编译cpp程序时,调用这些函数的时候,这些函数要按照c编译。

第一种情况:

果main.cpp文件要调用c函数接口,只要在main.cpp里面包含c函数接口用用extern “C” 括起来即可

例如:

//main.cpp文件
#include
using namespace std;
extern “C” //用extern“C”{ }声明math.c文件中的函数,以至于可以在main.cpp文件使用。
{
	int add (int x,int y);
	int sub(int x,int y);	
}
int main()
{
	cout
	
}
int sub()
{
	
}

	#include "math.h"
}

#endif  //__cplusplus
int add (int x,int y);//加法
int sub(int x,int y);//减法
int mult(int x,int y);//乘法
int div(int x,int y); //除法
//意思是如果使用该头文件math.h的文件定义了__cplusplus,
//则下面代码到#endif都是有效的,在这里是 } 有效
#ifdef __cplusplus
}
#endif  //__cplusplus
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]