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

  • wifi已连接不可上网是什么原因呢(wifi已连接不可上网是什么原因)(wifi已连接不可上网是什么原因电脑)

    wifi已连接不可上网是什么原因呢(wifi已连接不可上网是什么原因)(wifi已连接不可上网是什么原因电脑)

  • iphone抹掉所有内容和设置会怎样(iphone抹掉所有内容和设置没反应)

    iphone抹掉所有内容和设置会怎样(iphone抹掉所有内容和设置没反应)

  • 微信迁移二维码扫描失败(微信迁移二维码多久失效)

    微信迁移二维码扫描失败(微信迁移二维码多久失效)

  • 苹果悬浮球为什么没有显示出来(苹果悬浮球为什么移动不了)

    苹果悬浮球为什么没有显示出来(苹果悬浮球为什么移动不了)

  • 小米9se能换大电池吗(小米9se换大电池哪个牌子耐用)

    小米9se能换大电池吗(小米9se换大电池哪个牌子耐用)

  • 抖音怎么清理无效视频(抖音怎么清理无效关注)

    抖音怎么清理无效视频(抖音怎么清理无效关注)

  • vivo手机内存越来越少怎么回事(vivo手机内存越来越少怎么清理)

    vivo手机内存越来越少怎么回事(vivo手机内存越来越少怎么清理)

  • 微店极速支付有什么用(微店极速支付有什么优惠)

    微店极速支付有什么用(微店极速支付有什么优惠)

  • et后缀是什么文件(单词et后缀)

    et后缀是什么文件(单词et后缀)

  • 笔记本电脑上下载的钉钉为什么打不开(笔记本电脑上下左右键不能跳格怎么恢复)

    笔记本电脑上下载的钉钉为什么打不开(笔记本电脑上下左右键不能跳格怎么恢复)

  • ios13怎么调电量百分比(iphone13调电量百分比)

    ios13怎么调电量百分比(iphone13调电量百分比)

  • 微信怎么把收藏设置浮窗(微信怎么把收藏的东西删除)

    微信怎么把收藏设置浮窗(微信怎么把收藏的东西删除)

  • 华为手环怎么打开蓝牙(华为手环怎么打开微信)

    华为手环怎么打开蓝牙(华为手环怎么打开微信)

  • 小米cc9的卡怎么装(小米cc9e怎么放卡)

    小米cc9的卡怎么装(小米cc9e怎么放卡)

  • 小米9se支持快充吗(小米9se快充模式怎么设置)

    小米9se支持快充吗(小米9se快充模式怎么设置)

  • 文件夹怎样按顺序排列(文件夹怎样按顺序排序)

    文件夹怎样按顺序排列(文件夹怎样按顺序排序)

  • oppor17被刷机了还能找到吗(oppor17刷机以后还能找回吗)

    oppor17被刷机了还能找到吗(oppor17刷机以后还能找回吗)

  • p3024小时怎么设置(p30pro如何设置24小时)

    p3024小时怎么设置(p30pro如何设置24小时)

  • win10 应用商店没有网络怎么办?win10 应用商店无网络解决方法(win10应用商店没有软件库)

    win10 应用商店没有网络怎么办?win10 应用商店无网络解决方法(win10应用商店没有软件库)

  • Vue3【项目中引入Pinia、组合式API风格、核心概念(State、修改状态、Getters、Actions) 】(十四)-全面详解(学习总结---从入门到深化)(vue引用类型)

    Vue3【项目中引入Pinia、组合式API风格、核心概念(State、修改状态、Getters、Actions) 】(十四)-全面详解(学习总结---从入门到深化)(vue引用类型)

  • 可变现净值相关税费包括消费税吗
  • 税后经营净利率什么意思
  • 房地产项目公司是什么意思
  • 公司股东分红要交哪些税
  • 行政事业单位住房基金
  • 公司网站建设费做账是流量应计入
  • 对公账户汇款方式
  • 工程检测单位
  • 两免三减半的概率是多少
  • 以无形资产投资入股缴纳哪些税收
  • 免抵退税怎么做账
  • 代缴税款是什么意思
  • 发生销售退回如何开票
  • 折旧四种方法
  • 应付账款少记违反什么认定
  • 电子缴税付款凭证
  • 预售房提前还款需要去解押吗
  • 企业咨询服务费合同
  • 一般纳税人贸易公司每个月最低费用多少
  • 进项税超过销项怎么办?
  • 国家税务总局11号令
  • 因公出差的人身故怎么办
  • 增值税专用发票有效期是多长时间
  • 销售方收到红字信息表
  • 公司注销固定资产怎么处理税怎么交
  • 个人出租商铺要交城镇土地使用税吗
  • 免税销售额对应的进项税额
  • 支付工资资产减少了吗
  • 没进项发票要交多少税
  • 一台设备发票开来0.5台怎么做账?
  • 房屋租赁费应如何缴纳
  • 跨年发票能不能报销
  • 电脑文件启用宏是什么意思
  • yoosee怎么安装
  • 外币账户收到应收账款
  • 向灾区捐赠货物需要交增值税吗
  • 应税销售额含增值税吗
  • Discuz!X中SESSION机制实例详解
  • 员工安置费标准出台
  • 结转所得税费用到本年利润的会计分录
  • php yield 异步
  • 水利建设基金按季度缴纳
  • 印花税不足一元需要缴纳吗
  • 所得税申报表应怎么填
  • 路径规划是什么意思
  • 残疾人保证金优惠减免怎么申请退税
  • 使用服务器
  • 每个开发人员都有编制吗
  • python htmltestrunner报告
  • 建筑工程企业所得税预缴
  • dedecms源码
  • phpcms怎么用
  • 汽车租赁发票账务怎么开
  • 配置英文
  • 报废车残值需要多少钱
  • 小微企业确定条件
  • 现金流量表两年数据分析
  • 工伤鉴定费计入什么科目
  • 电子税务局增值税抵扣流程
  • 个人扣税是怎么扣的
  • 发票类别包含哪几种
  • 刚购入的固定资产已使用年限怎么填
  • 当月未取得发票的费用怎么入账
  • 进项税额转出为什么加到销项税额里
  • 增值税发票折扣发票
  • 基于sql server的大数据审计分析应用
  • 主板bios无法重置
  • win7系统有wifi功能吗
  • windowsxp查ip地址
  • 怎么卸载电脑上的迅雷软件
  • smss.exe是干嘛的
  • win7系统不能用了?
  • win降win7
  • Node.js中的construct
  • javascript如何学
  • 从最近两会看苹果和谷歌的最大梦魇
  • jQuery简单实现tab选项卡切换效果
  • 苏州社保代缴机构查询
  • 特定公共服务是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设