搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
2023面试高手
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
2023 Google 开发者大会:Web平台新动向
2
Android Apk文件包含的内容,资源文件,配置文件,dex文件等_android5.apk
3
微信小程序授权登录(含获取基本信息及绑定的手机号)_小程序获取用户微信号并绑定
4
VirtualBox7.0|ubuntu22.04|conda23|jupyter notebook集成环境安装配置及国内源更换-保姆级配置教程_ubuntu安装virtualbox7
5
Linux mount 流程详解_sb_silent
6
震惊:苹果手机电池栏“黑白无常”
7
【Python节日限定】新春快乐,绽放一场粒子烟花盛宴吧(完整代码)
8
学术前沿 | 基于深度学习的视觉三维重建研究总结
9
2020年上海市高等学校信息技术水平考试试卷_三级_数据科学技术及应用_模拟卷_三、程序填空题_答案_数据科学技术与应用模拟题(2020)
10
防火墙安全策略
当前位置:
article
> 正文
extern使用方法总结_extern一个函数怎么用
作者:2023面试高手 | 2024-03-18 16:20:38
赞
踩
extern一个函数怎么用
在c语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此次引用”。
一、extern基本使用方法
1、函数
函数的声明中使用extern关键字是可有可无的,因为函数本身不加修饰的话就是extern的。(函数和全局变量本质上没有区别,函数名时指向函数二进制块开头处的指针,而全局变量时在函数外部声明的变量,函数名也是在函数外,因此函数也是全局的)
2、变量
全局变量在外部使用声明时,必须要有extern关键字(如果变量无extern修饰且没有显式的初始化,则就变为变量的定义编译器在此标记存储空间在执行时加载内存并初始化为0)。
局部变量的声明不能有extern修饰,且局部变量再运行时才在堆栈部分分配内存空间。
二、头文件
头文件里面存放的是关于函数、变量、类的声明(不是定义,不要再头文件里面定义什么东西)。
#ifndef _XXX_头文件_.H
#define _XXX_头文件_.H
...
int A;
#endif
这里的int A是一个全局变量的定义,所以如果这个头文件被多次引用的话,那么A就会被重复定义,显然语法上出现了错误。只不过有了#ifndef的条件编译,所以能保证这个头文件只被引用一次,不过也许还会有问题。若多个c文件包含这个头文件时,因为宏名有效范围仅限于本c源文件,所以在这个多c文件编译时是不会出错的,但在链接时就会报错,说你多处定义了同一个变量。所以在头文件中最好不要定义变量等。
三、extern使用时最让人迷惑的地方是让人搞不清楚使用extern的地方是声明还是定义。下面分别就变量和函数举例说明。
(1)变量
<1> extern int a; //声明一个全局变量a
<2> int a; //定义一个全局变量a
<3> extern int a = 0; // 定义一个全局变量a,并赋初值0
<4> int a = 0; // 定义一个全局变量a,并赋初值0
(2)函数
函数定义的时候使用extern,说明这个函数是可以被外部引用的,声明的时候用extern说这是一个声明。但由于函数的定义和声明有区别,定义韩式要有函数体,声明函数没有函数体,所以函数定义和声明时都可以将extern省去,反正其它文件也是知道这个函数是在其他什么地方定义的,所以不加extern也行。
四、总结:
1、对于变量而言,如果你想在本源文件中使用另一个源文件中定义的变量,就需要在使用前用extern声明该变量,或者在头文件中用extern声明该变量;
2、对于函数而言,如果你想在本源文件中使用另一个源文件中定义的函数,就需要在使用前声明给函数,声明函数加不加extern都没有关系,所以在头文件中函数可以不用加extern。
3、extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要别引用,就放在*.h中并用extern来声明。
4、如果函数的声明中带有关键字extern,仅仅说明这个函数可能在别的源文件里定义,没有其他作用,既如下两个函数声明没有区别:
extern int f();和int f();
5、如果定义函数的c/cpp文件在对应的头文件中声明了定义的函数,那么在其他c/cpp文件中要使用这些函数,就只需要包含这个头文件即可。如果你不想包含头文件,那么就要在本c/cpp文件中声明该函数。一般来说,声明定义在本文件的函数不用extern,声明定义在其他文件中的函数用extern,这样在本文件中调用别的文件定义的函数时就不用包含头文件。
使用extern和包含头文件来引用函数有什么区别呢?
extern的引用方式比包含头文件哟啊简洁的多。extern的使用方法是直接了当的,想引用哪个函数就用extern声明哪个函数。这样做有一个明显的好处是,会加速程序的编译(预处理)的过程,节省时间,在大型c程序的编译过程中,这种差异很明显。
6、此外,extern修饰符可以用于指示C或者C++函数的调用规范。比如C++中调用C库函数,就需要在C++程序用extern "C"生声明引用的函数。这是给连接器用的,告诉连接器在链接的时候用C函数规范来链接。主要是C++和C程序编译完成后在目标代码中命名规则不同。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/2023面试高手/article/detail/264287
推荐阅读
article
Mac
nginx
的相关
使用
与
跨域
问题_
mac
nginx
跨域
...
文章目录一、
nginx
的安装1、
使用
brew2、官网下载二、
nginx
的
使用
一、
nginx
的安装1、
使用
brewbrew...
赞
踩
article
语言
能力
测试
C
1
,
本科生
实验实践
能力
测试
计算机
实验实践
能力
(
C
1
-
1
级)达.PDF......
本科生
实验实践
能力
测试
计算机
实验实践
能力
(
C
1
-
1
级)达.PDF
本科生
实验实践
能力
测试
计算机
实验实践
能力
(
C
1
-
1
级)...
赞
踩
article
【
linux
系统】如何在
服务器
上
安装
Anaconda
_华为昇腾
服务器
安装
anaconda
...
输入conda config --set auto_activate_base false可设置不自动进入base环境,...
赞
踩
article
基于
STM32
单片机
电子相册
设计_基于
stm32
嵌入式
开发板
的多功能电子相框...
将Bmp格式的图片存放到sd卡的picture文件夹中,然后
单片机
进行Bmp解码,将解码信息通过TFT1.8寸的液晶屏显...
赞
踩
article
Android
源码编译
AIDL
使用实例讲解及
Android
Studio
AIDL
的调用详解_系...
Android
日常开发中工作中经常到遇到这种情况,一些不能与源码编译的第三方APP想调用一些framework 层或者p...
赞
踩
article
华为
手机
安装
系统
能换
鸿蒙
,
华为
鸿蒙
将全面上线,
安卓
系统
或将被彻底替换...
目前
手机
操作
系统
之中,大概就是苹果的iOS
系统
以及谷歌的
安卓
系统
二分天下了。其实早前在
手机
操作
系统
之中还是有很多操作
系统
...
赞
踩
article
An
a
cond
a
------环境管理_w
a
rning:
a
newer
version
of con...
An
a
cond
a
中的Cond
a
核心功能就是包管理和环境管理,可以根据需要安装不同版本的python,而且能自由切换。1...
赞
踩
article
WPF
中的
Image
控件
Source
的设置_
wpf
image
source
...
WPF
中的
Image
控件
Source
的设置1.XAML中简单的方式(
Source
="haha.png");
image
控件...
赞
踩
article
谈谈
Mux
与
门电路
的相互替换(包含实例分析)_
mux
(
b
)
=
0
...
在秋招中,经常遇到的问题是用
Mux
替换
门电路
,例如与门,或门,非门,缓冲器,异或,甚至一位全加器,之前写过与此相关的博客...
赞
踩
article
从
零学起
-----
通识篇09
Ipv6
_
ipv6
环回
地址
...
一、学习目标理解IPv6的表示方法和
地址
类型二、学习背景在IPv4诞生的时代,是无法预见今日互联网的繁荣程度的,因此很多...
赞
踩
article
谈谈如何
使用
opencv
进行
图像识别
_
opencv
图像识别
...
原文由hakaboom发表于TesterHome社区,点击原文链接可与作者直接交流。1)前言从18年开始,我接触了叉叉助...
赞
踩
article
PyQt
设置快捷键_
pyqt
qtabeview
设置快捷键...
结合QShortcut和QKeySequence_
pyqt
qtabeview
设置快捷键
pyqt
qtabeview
设置...
赞
踩
article
利用
pyinstaller
给
python
程序打包成
exe
可执行文件
并且自
定义
exe
程序
图标
_pyth...
视频地址:https://www.bilibili.com/video/BV1Ff4y1r7gX_
python
开发的软...
赞
踩
article
【探索
AI
潜能
,
连结现代通讯】
相隔万里
,
我们
与
AI
一同
赏月
。...
近年来
,
AI
得到了迅猛的发展
,
尤其是大模型的出现受到了广泛的关注和讨论。ChatGPT、文心一言等纷纷登场
,
可谓是百家争...
赞
踩
article
-
bash
:
nginx
:
command
not
found
解决方案...
我的
nginx
安装目录为:usr/local/
nginx
百度了好多都是在说在*/etc/profile*文件中添加PAT...
赞
踩
article
linux
基础总结_
mv
带属性
和
权限
...
基础命令ls pwd cd mkdir -p 创建多层目录 touch
mv
移动 rm -f强制 -i递归进阶命令...
赞
踩
article
手绘
图形
识别方法
(
算法
)_
手绘
图形
识别方法
(
算法
)...
一些工具软件有
手绘
图形
功能,手画一个三角形、平行四边形,虽然画的歪歪扭扭,但是工具内部能够自动转换为数字化的几何
图形
。 ...
赞
踩
article
windows
系统下
opencv
训练
自己的
xml
模型
_
opencv
自定义
模型
训练
...
具体细节操作参考链接:https://blog.csdn.net/qq_32502511/article/details...
赞
踩
article
域名
解析
详解_
解析
显式
转发
...
域名
解析
详解,域名
转发
,隐性和显性
转发
的区别_
解析
显式
转发
解析
显式
转发
1). NS域名服务器,...
赞
踩
article
EventBus
的
StickyEvents
黏性
事件
详解及使用说明_
eventbus
粘性
事件
的
处理...
EventBus
还支持发送
黏性
事件
。何为
黏性
事件
呢?简单讲,就是在发送
事件
之后再订阅该
事件
也能收到该
事件
,跟
黏性
广播类似...
赞
踩
相关标签
nginx
语言能力测试C1
linux
运维
服务器
单片机
stm32
嵌入式硬件
AIDL Service
Android Studio AIDL
源码编译AIDL
应用程序通讯
接口
华为手机安装系统能换鸿蒙
python
pycharm
网络协议
网络
软件工程
web安全
c1认证
图像识别
opencv
UI自动化