ios中extern和extern "C"

extern

在一个项目中必须保证函数、变量、枚举等在所有的源文件中保持一致,除非指定定义为局部的。一个全局变量在所有的模块当

中只能被声明一次,否则会出现链接错误。但是可以声明很多次,且声明必须保证类型一致。用 extern 声明时一个变量时,并

不是定义一个变量,也不会为变量分配内存空间。extern 是 c/c++ 语言中表明函数和全局变量作用范围(可见性)的关键字,该

关键字告诉编译器,其声明的函数或变量可以在本模块或者其他模块中使用。通常,在模块的头文件中对本模块提供给其他模块

使用的函数和全局变量以关键字 extern 声明。

例如:如果模块 B 想要引用模块 A 中定义的全局变量和函数时,只包含模块 A 的头文件即可。这样,模块 B 调用模块 A 的函数时,在编译阶段,模块 B 虽然找不到该函数,但是并不会报错,它会在链接阶段中从模块 A 编译生成的目标代码中找到此函数。
与 extern 对应的关键字是 static。被 static 修饰的全局变量或函数,只能在本模块中使用。因此,一个函数或变量只能在本模块中使用时,不能够使用 extern 修饰。

extern "C"

一个 C++ 程序中可能包含其他语言编写的部分代码,同样,C++ 编写的代码片段也可能被用在其他语言编写的代码中。

但是,不同语言编写的代码相互调用是困难的,更何况用同一种语言编写,使用不同编译器进行编译的情况。

因为,不同语言或者同种语言在不同编译器上编译时,在注册变量,传递参数和参数在栈上的布局上可能存在差异。为了使它们

遵守统一规则,可以使用 extern 指定一个编译和链接规约。extern “C” 指令中的 C,表示的是一种编译和链接规约,而不是一种

语言。C 表示符合 C 语言的编译和链接规约的任何语言。还要说明的是,extern “C” 指令指定的编译和链接规约,不会影响语

义,只是改变编译和链接的方式。如果很很多语句要加上 extern "C",可以将它们放到 extern "C" {} 中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值