extern 关键字

本文详细介绍了C/C++中的extern关键字,讲解了如何使用extern声明外部变量和函数,探讨了声明函数时是否需要extern的规则,并解释了extern "C"在混合编程中的作用,强调在实际编程中,通常在声明外部函数时不需要使用extern关键字。
部署运行你感兴趣的模型镜像

一 extern 声明一个外部变量:

外部变量是指在调用点所在函数或者文件外部定义的全局变量。


二 extern 定义或声明外部函数:
外部函数的概念和外部变量类似,是指在调用点所在函数或者文件外部定义的函数。

a. 定义函数时,在函数返回值类型前面加上extern关键字,表示此函数是外部函数,可供其他文件调用。
   c语言规定,定义函数时省略extern的,默认为外部函数。

b. 调用外部函数时,需要用extern对函数作出声明。
    c语言规定,声明函数时,可以省略extern。


声明外部函数时,为什么可以省略extern呢?
因为 “声明外部函数”有两层含义,一是,声明函数;二是,外部函数。
那么,首先,声明函数,当然不需要extern呀,因为函数的声明和定义区别是很明显的。
外部函数,看样子,用extern关键字来告诉编译器这是声明一个外部函数是一个不错的选择。
那么,如果不用extern呢?编译器知道了此函数声明,然后在之前没有发现此函数的定义,自然就知道了这应该是一个外部函数了。所以,似乎不加extern也是可以的。

c/c++也真奇怪,规则定义得也太不严密了,为什么声明外部函数时可以加extern也可以省略呢?
个人觉得可能是为了与extern声明外部变量的用法保持一致。声明外部函数时,完全不用加extern,编译器自己就能知道的。但是为了保持与声明外部变量的用法一直就也允许用extern来声明了。
 

声明函数和声明变量:
参考:

int   func();

int   func()
{
}

上面的两个非常清楚,第一个是声明,第二个是定义,因为函数声明在参数表括号后面是分号,而函数定义的参数表括号后面是

花括号,无论对于人还是编译器,这个都非常好判断。

而对于变量的声明和定义,如果采用上面的方法,就无法分得清了

int   i;

因此,对于变量的声明,需要使用extern关键字,即:

extern   int   i;

这样就和定义区分开来。

为了一致,也可以为函数声明使用extern关键字,但不是必需的,而且也不推荐这样用。

以上内容取自ANSI   C语言标准说明。

 

总结:
    就是声明变量时,必须要加extern;声明函数时可以加extern,也可以不加,一般不推荐加。

    所以,对于我们平时的头文件,声明外部函数时从来都不加extern关键字,因为没这必要。

    函数前置声明时,同理也可以不加extern关键字。


extern "C"是连接申明(linkage declaration),被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。
extern "C"这个声明的作用:
实现C++与C及其它语言的混合编程

extern "C"只是影响它修饰的函数,告诉编译器按照c语言的编译时函数命名规则来处理此函数。如果是c++环境,所有的语法检查都依旧是按照c++来检查,而且此函数内部所调用的函数的编译时命名还是按照c++的规则来的。即extern "C"修饰的函数里可以调用c++的代码,而且这部分c++代码丝毫不受extern "C"的影响。


您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值