位置: IT常识 - 正文

在 C# CLR 中学习 C++ 之了解 extern(c+c#)

编辑:rootadmin
一:背景 在 CLR 源码中有很多的 extern 和 extern "C" 这样的关键词,比如下面这些代码: extern size_t gc_global_mechanisms 一:背景

推荐整理分享在 C# CLR 中学习 C++ 之了解 extern(c+c#),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:c# cicd,learn c#,c# class program,cls c#,c#il,learn c#,c#中\r,learn c#,内容如对您有帮助,希望把文章链接给更多的朋友!

在 CLR 源码中有很多的 extern 和 extern "C" 这样的关键词,比如下面这些代码:

extern size_t gc_global_mechanisms[MAX_GLOBAL_GC_MECHANISMS_COUNT];extern DWORD g_dwHandles;// The single GC heap instance, shared with the VM.extern IGCHeapInternal* g_theGCHeap;extern PTR_VOID GetUnwindDataBlob(TADDR moduleBase, PTR_RUNTIME_FUNCTION pRuntimeFunction, /* out */ SIZE_T * pSize);extern "C" uint32_t* g_gc_card_table;extern "C" uint8_t* g_gc_lowest_address;extern "C"{ uint8_t *g_gc_sw_ww_table = nullptr; bool g_gc_sw_ww_enabled_for_gc_heap = false;}

那这些都是什么意思呢? 为了更好的学习 CLR,这些还是要简单了解一下的。

一:extern1. 变量定义和变量引用

在 C# 中并没有听说过有 extern 这种概念,其实变量可以有两种方式存在。

变量定义

变量引用

变量定义概念很简单,定义就得给它分配内存空间,比如下面这样:

#include <iostream>#include <Windows.h>int k = 10;const char* ch = "abcde";int main(){printf("ch=%d", strlen(ch));}

接下来看下 变量引用,它其实和 文件引用 以及 C# 的 using 概念相似,即把其他文件中的变量引入到本文件,目的就是为了使用,比如在 Arts 文件下定义了一个 page.cpp 文件,截图如下:

为了能够在 ConsoleApplication3.cpp 中使用 int i ,那怎么办呢? 这时候就需要用 extern 引入了。

在 C# CLR 中学习 C++ 之了解 extern(c+c#)

因为 VisualStudio 可以帮我们自动链接,所以这里就不需要 #include "page.cpp" 导入,接下来把程序跑起来,就可以观察到程序的结果。

如果不用 extern 导入的话,就会出现编译错误,说 n 是未定义的。

还有一点要注意 extern 是对外部变量的一个引用,它不会生成任何汇编代码。

2. extern "C"

要理解这个关键词,首先要明白 方法符号 的概念,因为 C 和 C++ 在给方法生成符号的逻辑是不一样的,比如同样的一个 fly 函数。

#include <stdio.h>void fly() {printf("hello world");}int main(){}

在 C 中生成的函数名还是 fly 字样。

可 C++ 不这么认为,它会对 fly 函数名重新编排,比如下面的 ?fly@@YAXXZ。

如果你在 C++ 中混用 C 的话,这时候就有理念冲突,那在C++中让某些函数名还是原样生成有办法吗?当然可以了,这就需要使用 extern "C" ,参考如下代码:

// page.cpp#include <stdio.h>extern "C"{void fly() {printf("hello");}}void fly2() {printf("hello");}

然后可以在 ConsoleApplication.cpp 中引入进来。

// ConsoleApplication.cpp#include <iostream>extern "C" void fly();extern void fly2();int main(){fly();fly2();return 0;}

好了,本篇就简单说这么多吧,相信再回头看 CLR 中的那些 extern 关键词,你会有一些新的理解。

本文链接地址:https://www.jiuchutong.com/zhishi/304673.html 转载请保留说明!

上一篇:python中sys.argv模块的介绍(python中sys模块)

下一篇:mysql中regexp_instr函数的使用

  • 小米手表color2怎么下载软件(小米手表color2怎么唤醒屏幕)

    小米手表color2怎么下载软件(小米手表color2怎么唤醒屏幕)

  • 抖音怎么连续播放视频(抖音怎么连续播放别人艾特的视频)

    抖音怎么连续播放视频(抖音怎么连续播放别人艾特的视频)

  • 华为车道级导航怎么用(华为车道级导航和高德有什么区别)

    华为车道级导航怎么用(华为车道级导航和高德有什么区别)

  • pdf/a是什么格式(.pdf是什么文件格式)

    pdf/a是什么格式(.pdf是什么文件格式)

  • 学信网上的照片可以下载吗(学信网上的照片可以自己上传吗)

    学信网上的照片可以下载吗(学信网上的照片可以自己上传吗)

  • 电脑加硬盘需要重做系统吗(电脑加硬盘需要重新分区吗)

    电脑加硬盘需要重做系统吗(电脑加硬盘需要重新分区吗)

  • oppopbcm10是啥型号(oppopbcm10多少钱)

    oppopbcm10是啥型号(oppopbcm10多少钱)

  • 移动卡无法访问网络是怎么回事(移动卡无法访问移动网络是什么意思)

    移动卡无法访问网络是怎么回事(移动卡无法访问移动网络是什么意思)

  • ipad充上电后开不开机(ipad充完电就会屏幕打不开)

    ipad充上电后开不开机(ipad充完电就会屏幕打不开)

  • 爱奇艺可以更改手机号码吗(爱奇艺可以更改成日语)

    爱奇艺可以更改手机号码吗(爱奇艺可以更改成日语)

  • 作业帮有没有电脑版的(作业帮有没有电脑板)

    作业帮有没有电脑版的(作业帮有没有电脑板)

  • 电脑可以装几个固态硬盘(电脑可以装几个系统)

    电脑可以装几个固态硬盘(电脑可以装几个系统)

  • iphone怎么应用加密(苹果手机软件怎么加)

    iphone怎么应用加密(苹果手机软件怎么加)

  • 红米note8应用全屏显示怎么设置(红米note8应用锁怎么取消)

    红米note8应用全屏显示怎么设置(红米note8应用锁怎么取消)

  • wadl temp文件能删除吗(temp文件不能删除哦)

    wadl temp文件能删除吗(temp文件不能删除哦)

  • 爱奇艺怎么看预约的电视剧(爱奇艺怎么查看预约)

    爱奇艺怎么看预约的电视剧(爱奇艺怎么查看预约)

  • 拼多多怎么取消连抽(拼多多怎么取消免密支付)

    拼多多怎么取消连抽(拼多多怎么取消免密支付)

  • iphone11怎么关机(iphone11怎么关机和开机)

    iphone11怎么关机(iphone11怎么关机和开机)

  • 苹果为什么付款方式无效(苹果为什么付款方式被拒怎么解决)

    苹果为什么付款方式无效(苹果为什么付款方式被拒怎么解决)

  • 电脑上的ppt怎么传到手机上(电脑上的ppt怎么传到微信上)

    电脑上的ppt怎么传到手机上(电脑上的ppt怎么传到微信上)

  • 笔记本显示连接不可用(笔记本显示连接不可用有个红色叉号)

    笔记本显示连接不可用(笔记本显示连接不可用有个红色叉号)

  • 高德地图上怎么上店名(高德地图上怎么看方向)

    高德地图上怎么上店名(高德地图上怎么看方向)

  • Ichetucknee河的海牛,佛罗里达州 (© Jennifer Adler/Alamy)

    Ichetucknee河的海牛,佛罗里达州 (© Jennifer Adler/Alamy)

  • lvdisplay命令  显示LVM逻辑卷属性(display version命令)

    lvdisplay命令 显示LVM逻辑卷属性(display version命令)

  • 往年有亏损本年没有亏损
  • 资源税计入什么科目
  • 合伙企业所得税怎么征收
  • 实验耗材计入什么科目
  • 季节性临时工是不是可以不上社保
  • 企业购进材料入什么账户
  • 未达起征点销售额和小微企业免税销售额
  • 土地转让的税费怎么算
  • 缴纳税金属于什么会计分录
  • 未取得发票的费用
  • 中小型企业库存的问题及对策
  • 按应收账款余额计提坏账准备的会计分录
  • 专项用途财政资金纳税调整规则
  • 物业公司开场地租赁费发票编码
  • 上一年度多计提折旧怎么调整
  • 运费开进发票
  • 应收账款贷方余额表示什么
  • 个税返还交所得税吗
  • 代扣车船税的手续有哪些
  • 企业装修期间开工怎么办
  • 企业收到党建经费 所得税
  • 上年度所得税费用又退回来了,如何做账
  • 理财代持有法律效力吗
  • 购买现金支票的扣费方式
  • 收到美金货款
  • mac打不开网页但是可以上微信
  • 车间管理人员工资记什么费用
  • 压缩文件夹发给别人他能看到我桌面上的文件吗
  • 苹果电脑mac系统怎么用
  • 公司开业前启动大会
  • 估计退货的会计分录
  • 预收的购货款属于收入吗
  • 委托代销商品的科目编码
  • 藏红花 (© Hayami Yanagisawa/Getty Images)
  • linux多网卡聚合
  • 销售自己使用过的旧货
  • mac phpstudy
  • 企业一次性收取租金如何缴纳增值税
  • npm ERR! notarget No matching version found for xxx@^1.0.64. npm 插件安装失败
  • 给深度学习研究生的入门建议(未完待续ing)
  • 企业购买的土地出买后无法收回资金属国有资产流失吗?
  • 交通费比例
  • python numpy 删除元素
  • python操作yaml文件
  • 数组和结构体
  • 企业所得税营业收入怎么填
  • 小微企业需要专职安全员吗
  • 银行代发工资流失原因
  • 使用sql server
  • 教育行业税收优惠政策2022
  • 暂估回冲方式
  • 承兑到期没兑现怎么办
  • 施工仪器的主要类别
  • 总公司与分公司关系证明模板
  • 社保年度汇算清缴怎么做
  • 增值税可以退吗
  • 可转债公允价值变动计入
  • 残疾人就业保障金
  • 如何理解其他应收款的概念
  • 进项做成了销项怎么调账
  • 诺诺开票人怎么修改
  • 结转销售成本怎么操作
  • 选择mysql数据库为当前数据库
  • sql多表连接查询
  • 如何更改桌面文件存放位置
  • iso镜像怎么装
  • 怎么用win7兼容模式运行
  • windows7老是死机
  • win10mobile官网
  • 超人飞车助手下载安装
  • perl中my
  • linux系统中rpm命令主要功能
  • jquery绑定事件和移除事件
  • jquery动态创建元素
  • js实现聊天框
  • python遍历列表的两种方法
  • 江西电子税务局官网
  • 什么是委托代征专用账户管理
  • 安徽省滁州市税务局地址
  • 税控盘打印机设置参数
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设