首页 > 其他分享 >//#ifdef __cplusplus extern "C" 含义

//#ifdef __cplusplus extern "C" 含义

时间:2023-05-22 19:04:24浏览次数:45  
标签:__ cplusplus ifdef endif extern 代码



#ifdef __cplusplus
extern "C" {
#endif

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (nonatomic, readonly) UIView *headView;

@end

//#ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif


//这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入"extern "C"{" 和 " }"处理其中的代码,其中{ }内部的代码是通过extern"C"进行处理。要明白为何使用extern"C",还得从cpp中对函数的重载处理开始说起。在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,加入比如函数的返回类型等等.而在C中,只是简单的函数名字而已,不会加入其他的信息.也就是说:C++和C对产生的函数名字的处理是不一样的.

//C++之父在设计C++之时,考虑到当时已经存在了大量的C代码,为了支持原来的C代码和已经写好C库,需要在C++中尽可能的支持C,而extern"C"就是其中的一个策略。因此,为了在C++代码中调用用C写成的库文件,就需要用extern"C"来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。
//这个{}里面的#endif对应上面的#ifdef-cplusplus,#ifdef-cplusplus对应最后的#endif, #ifdef与#endif总是一一对应的,表明条件编译开始和结
    
#ifdef __cplusplus
}
#endif



标签:__,cplusplus,ifdef,endif,extern,代码
From: https://blog.51cto.com/u_16124099/6326580

相关文章

  • iOS UITabBarController 典型应用
    -(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{self.window=[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];//Overridepointforcustomizationafterapplicationlau......
  • 【万象奥科】RK3568和RK3399有什么区别?
    ▎简介RK3568和RK3399都是Rockchip公司的处理器,具有不同的特点和适用场景。以下是它们的主要区别和应用场景。▎RK3568RK3568是新一代的高性能处理器,采用了22nm工艺,具有更高的性能和更低的功耗。它支持4K视频解码和编码,支持多种接口和协议,如HDMI、USB、PCIe、Gigabit Ethernet等。......
  • 浅析视频技术与AI智能识别技术在智慧矿山场景中的应用
    一、背景分析能源与矿业是我国国民经济的重要物质生产部门和支柱产业之一,同时也是一个安全事故多发的高危行业,施工阶段的现场管理对工程成本、进度、质量及安全等至关重要。国家矿山安监局陆续发布(矿安〔2022)128号)文、(矿安综〔2023〕5号)文推动矿山重大灾害风险防控,山西、贵州......
  • iOS Apple Development Document 详解
    iOS官方开发文档https://developer.apple.com/library/prerelease/ios/navigation/点击打开链接再次标记一下。......
  • 如何避免windows update自动更新关闭后,仍然是开启的状态。彻底解决办法
    为了禁止系统自动更新,很多用户都会禁用WindowsUpdate服务,但是后来发现它还会自动开启,这该怎么办?针对这个问题,下面小编就来告诉大家。一、关闭更新服务后还要禁止它恢复启动1、按WIn+R调出运行,输入【services.msc】或此电脑右键--管理--服务和应用程序--服务。2、在右......
  • 2023新版小程序头像昵称显示 代码示例如下 可复制使用
    新版用户授权名字和头像官网点击触发用户头像部分:<blockwx:if="{{!avatarUrl}}">检查用户头像是否存在。如果头像不存在,显示默认头像。<blockwx:else="{{avatarUrl}}">如果头像存在,显示用户头像。<buttonopen-type="chooseAvatar"bind:chooseavatar="onChooseAvatar"cl......
  • Docker容器
    Docker容器模块一:安装docker在三台服务器的完成docker的安装1,配置IP地址进行连接2,关闭selinux,防火墙,配置主机名和域名解析systemctldisablefirewalld;systemctlstopfirewalld//关闭防火墙和开机自启iptables-F;iptables-X;iptables-Z;iptables-savehostn......
  • 利用Python爆破数据库备份文件
    某次测试过程中,发现PHP备份功能代码如下://根据时间生成备份文件名$file_name='D'.date('Ymd').'T'.date('His');$sql_file_name=$file_name.'.sql';那么形成的文件名格式如:D20180118T101433.sql,理论上是可以爆破的,于是写了一段Python脚本来尝试爆破。Py......
  • Windows 2012 R2 安装Nessus
    1、nessus官网注册注册地址:https://www.tenable.com/products/nessus-home Name字段随意,邮箱需要填写自己的,方便接受注册码2、注册后,登录邮箱查收邮件,可以获取注册码3、打开Nessus下载界面,下载对应操作系统版本的nessus下载地址:https://www.tenable.com/downloads/nessus4、下载完......
  • MT6833(天玑 700)处理器参数_芯片规格_性能_功能
    MT6833,又称为天玑700,是一款高性能芯片。它采用了八核CPU,其中包括两颗主频高达2.2GHz的ArmCortex-A76核心,可以让用户享受到更流畅的使用体验。此外,它还配备了高性能LPDDR4X内存和UFS2.2存储,可以带给用户更快的数据传输速度,使用户在玩游戏、看视频、拍照片、即时聊天或者在线......