位置: 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函数的使用

  • 零基础如何有效互推涨粉?(零基础的人如何开始锻炼)

    零基础如何有效互推涨粉?(零基础的人如何开始锻炼)

  • 支付宝如何删除账单明细(支付宝如何删除转账联系人)

    支付宝如何删除账单明细(支付宝如何删除转账联系人)

  • 西安一码通怎么解绑身份证(西安一码通怎么解绑微信)

    西安一码通怎么解绑身份证(西安一码通怎么解绑微信)

  • 老年机2g和4g区别(老年机是2g)

    老年机2g和4g区别(老年机是2g)

  • 抖音评论区带图片怎么发的(抖音评论区的图片是怎么搞上去的)

    抖音评论区带图片怎么发的(抖音评论区的图片是怎么搞上去的)

  • 十六进制数cd等值的十进制数是(十六进制cd的十进制)

    十六进制数cd等值的十进制数是(十六进制cd的十进制)

  • 文档变成了很多小页怎么办(文档变成了很多空白页)

    文档变成了很多小页怎么办(文档变成了很多空白页)

  • 苹果电脑漏电是什么原因(苹果电脑漏电是什么原因开不了机)

    苹果电脑漏电是什么原因(苹果电脑漏电是什么原因开不了机)

  • 超清是1080p还是720p(超清是1080p还是2k)

    超清是1080p还是720p(超清是1080p还是2k)

  • 快手买东西不发货怎么办(快手买东西不发货查不到订单怎么办)

    快手买东西不发货怎么办(快手买东西不发货查不到订单怎么办)

  • 按住什么键可以选择多张不连续的幻灯片(按住什么键可以绘制正方形)

    按住什么键可以选择多张不连续的幻灯片(按住什么键可以绘制正方形)

  • 苹果ml开头的是什么机(苹果ml开头是什么意思)

    苹果ml开头的是什么机(苹果ml开头是什么意思)

  • nova5pro充电时间(华为nove5pro充电时间)

    nova5pro充电时间(华为nove5pro充电时间)

  • 苹果查蓝牙耳机电量(苹果查蓝牙耳机定位)

    苹果查蓝牙耳机电量(苹果查蓝牙耳机定位)

  • 手机qq怎么隐身(手机qq怎么隐身访问空间)

    手机qq怎么隐身(手机qq怎么隐身访问空间)

  • 刷脸支付叫什么(刷脸支付是干什么的)

    刷脸支付叫什么(刷脸支付是干什么的)

  • iphonex有3dtouch么

    iphonex有3dtouch么

  • 小度在家可以投屏吗(小度在家可以投影吗)

    小度在家可以投屏吗(小度在家可以投影吗)

  • 荣耀stf-al10是什么型号(honor stf-al10)

    荣耀stf-al10是什么型号(honor stf-al10)

  • 华为p30pro充电器型号(华为p30pro充电器是40w还是66w)

    华为p30pro充电器型号(华为p30pro充电器是40w还是66w)

  • 抖音需要多少粉丝可以开直播(抖音需要多少粉丝才有收益)

    抖音需要多少粉丝可以开直播(抖音需要多少粉丝才有收益)

  • 咸鱼消息提醒在哪设置(闲鱼消息短信提醒)

    咸鱼消息提醒在哪设置(闲鱼消息短信提醒)

  • 华为rcs服务是什么(rcs_service是什么)

    华为rcs服务是什么(rcs_service是什么)

  • bengine.exe是什么进程 bengine进程安全吗(wrme.exe是什么)

    bengine.exe是什么进程 bengine进程安全吗(wrme.exe是什么)

  • CiteSpace关键词共现图谱含义详细解析与注意事项(citespace关键词共现分析)

    CiteSpace关键词共现图谱含义详细解析与注意事项(citespace关键词共现分析)

  • 帝国cms如何安装模板(帝国cms8.0)

    帝国cms如何安装模板(帝国cms8.0)

  • 电脑学习网免费分享2022年6月14日国外苹果iphone应用商店AppStore账号和密码(哪个网站可以免费学电脑)

    电脑学习网免费分享2022年6月14日国外苹果iphone应用商店AppStore账号和密码(哪个网站可以免费学电脑)

  • 火车票全额抵减增值税可以吗
  • 财税证与会计证区别
  • 安全生产费实际发生必须是付款吗还是挂帐也可以
  • 无形资产开发阶段计入什么科目
  • 砖厂开票员的工作流程
  • 企业其他综合收益减少应该怎么处理
  • 闲置设备折旧企业所得税税前扣除
  • 没开发票可以确认收入吗?
  • 2021年工作绩效未达标扣工资
  • 员工入股怎么分成
  • 员工外出培训报告怎么写
  • 纳税人取得不动产进项税额怎么抵扣
  • 非居民企业出租不动产房产税
  • 个体户如何报年报
  • 税款滞纳金可以退吗
  • 高杠杆资金是什么意思
  • 物业管理企业简介范文
  • 承兑汇票贴单怎么贴
  • 航天信息服务费280元会计处理
  • 企业已交地税税金如何做账务处理?
  • 什么是盈余公积和资本公积
  • uefi系统安装win7gho
  • 网络不通怎么办苹果手机
  • mac设置在哪里设置
  • 电脑网络提示ip地址错误怎么办
  • 非合理损耗怎么做分录
  • 企业所得税会计利润
  • 成本核算方法主要有哪些
  • 导航菜单是什么
  • php 提交表单
  • 购买商品或服务赠品法律地位
  • 【强化学习探索01】Win10 下gym安装
  • c++ 每日十问3-处理数据
  • php数组的类型有哪些
  • 权益法转成本法其他综合收益需要结转吗
  • 电影制片过程
  • 税控盘费和服务费都可以减免吗
  • 香港公司代收国际汇款税务怎么处理
  • 怎么摊销租金
  • 租金的支付期限是多久
  • 合并会计报表编制实例
  • 抵扣进项税额是啥意思
  • 支付宝和微信的财务统计
  • 茶叶企业所得税减免
  • 发行股票时支付的手续费
  • 发票必须包含什么内容
  • 三个月 租房
  • 付国外客户佣金怎么代扣代缴增值税
  • 银行代发工资业务收费吗
  • 收到错误发票已入账跨月重新开会计分录
  • 年度所得税汇算清缴报告在哪打印
  • 红字冲销法可能会涉及的摘要有
  • 怎样编制银行存款凭证
  • 数据库设计三大范式
  • sql server 3417错误
  • sql server错误和使用情况报告
  • mysql数据库开发技术
  • win7系统怎么关闭病毒防护
  • xp系统怎么提升性能
  • 免激活合法使用的软件
  • open bsd
  • win8管理工具在哪里
  • centos中用户的基本属性
  • 大白菜U盘安装原版XP系统教程精细版
  • ubuntu 18.04怎么用
  • winxp如何打开控制面板
  • linux挂载yum
  • Win7打印机安装
  • 进入Linux单用户模式
  • unity做小地图
  • python与c
  • 用javascript
  • python os.access
  • 严格模式的作用
  • python怎么写多行
  • 浅析是什么意思
  • 如何查询企业税务评级
  • 不用税控盘可以勾选发票吗
  • 开票盘是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设