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

  • 抓住了人们内心的恐惧,推广效果会更好(抓住了人们内心的变化)

    抓住了人们内心的恐惧,推广效果会更好(抓住了人们内心的变化)

  • 13pro和13区别(13pro和13区别摄像头)

    13pro和13区别(13pro和13区别摄像头)

  • fileinputstream中文乱码(fileinputstreamreader)

    fileinputstream中文乱码(fileinputstreamreader)

  • 连接错误678怎么解决(网络连接错误678)(连网错误678什么意思)

    连接错误678怎么解决(网络连接错误678)(连网错误678什么意思)

  • Uber Eats试点计划使用机器人和AV进行食品配送

    Uber Eats试点计划使用机器人和AV进行食品配送

  • 苹果12什么时候发售(苹果12什么时候出来)

    苹果12什么时候发售(苹果12什么时候出来)

  • 快手怎么领取别人送的卡(快手怎么领取别人的礼物)

    快手怎么领取别人送的卡(快手怎么领取别人的礼物)

  • 华为手机怎么退出所有应用(华为手机怎么退出屏幕朗读模式)

    华为手机怎么退出所有应用(华为手机怎么退出屏幕朗读模式)

  • 淘宝如何修改性别(淘宝如何修改性别和价格)

    淘宝如何修改性别(淘宝如何修改性别和价格)

  • 苹果6plus尺寸长宽高(苹果手机6plus尺寸长宽)

    苹果6plus尺寸长宽高(苹果手机6plus尺寸长宽)

  • oppor17换屏后指纹不能用(oppor17换屏后指纹不能用什么原因)

    oppor17换屏后指纹不能用(oppor17换屏后指纹不能用什么原因)

  • 抖音收藏的地址在哪里看(抖音收藏的地址怎么找不到)

    抖音收藏的地址在哪里看(抖音收藏的地址怎么找不到)

  • iphone6有暗黑模式吗(苹果6p的暗黑模式在哪)

    iphone6有暗黑模式吗(苹果6p的暗黑模式在哪)

  • 腾讯会议怎么查看回放(腾讯会议怎么查看历史会议参会人员信息)

    腾讯会议怎么查看回放(腾讯会议怎么查看历史会议参会人员信息)

  • 淘宝一个钻多少单(淘宝一个钻多少权重)

    淘宝一个钻多少单(淘宝一个钻多少权重)

  • 双固态硬盘要注意什么(双固态硬盘影响性能吗)

    双固态硬盘要注意什么(双固态硬盘影响性能吗)

  • 屏幕为什么自己会乱动(屏幕为什么自己会乱点)

    屏幕为什么自己会乱动(屏幕为什么自己会乱点)

  • 华为gt1和2的区别(华为gt1 gt2对比评测)

    华为gt1和2的区别(华为gt1 gt2对比评测)

  • 电脑桌面纵向怎么设置(电脑桌面纵向怎样改横向)

    电脑桌面纵向怎么设置(电脑桌面纵向怎样改横向)

  • 300兆用几类网线(300m宽带用几类网线)

    300兆用几类网线(300m宽带用几类网线)

  • word怎么设置文档纸张大小(word怎么设置文本格式)

    word怎么设置文档纸张大小(word怎么设置文本格式)

  • ps怎么把人p成光头(ps怎么把人物变成黑白光影)

    ps怎么把人p成光头(ps怎么把人物变成黑白光影)

  • 华为mate30nfc是什么意思(mate30nfc功能)

    华为mate30nfc是什么意思(mate30nfc功能)

  • 三星手机有录屏功能吗(苹果手机的录屏在哪)

    三星手机有录屏功能吗(苹果手机的录屏在哪)

  • seaal10是什么型号(sea—al10是什么型号多少钱)

    seaal10是什么型号(sea—al10是什么型号多少钱)

  • 拼多多月销量会清零吗(拼多多销量会影响权重吗)

    拼多多月销量会清零吗(拼多多销量会影响权重吗)

  • 苹果短信怎么发爱心(苹果短信怎么发不出去信息)

    苹果短信怎么发爱心(苹果短信怎么发不出去信息)

  • 华为优享版是什么意思(华为商城优享购是什么)

    华为优享版是什么意思(华为商城优享购是什么)

  • 抖音怎么上传截图图片(抖音怎么上传截图图片给客服)

    抖音怎么上传截图图片(抖音怎么上传截图图片给客服)

  • oppoa9和oppor17对比(0pp0a9和r17哪个好)

    oppoa9和oppor17对比(0pp0a9和r17哪个好)

  • 魅族电池校正指令(魅族手机校正电池电量)

    魅族电池校正指令(魅族手机校正电池电量)

  • 魅族如何打开OTG(魅族如何打开OTG功能)

    魅族如何打开OTG(魅族如何打开OTG功能)

  • 部分被雪覆盖的Val Cervara山坡上的老山毛榉林,意大利蒙帕赛诺 (© Bruno D'Amicis/Minden Pictures)(被雪覆盖的山峰)

    部分被雪覆盖的Val Cervara山坡上的老山毛榉林,意大利蒙帕赛诺 (© Bruno D'Amicis/Minden Pictures)(被雪覆盖的山峰)

  • 用chatgpt写insar地质灾害的论文,重复率只有1.8%,chatgpt4.0写论文不是梦

    用chatgpt写insar地质灾害的论文,重复率只有1.8%,chatgpt4.0写论文不是梦

  • 代扣代缴境外增值税可以抵扣
  • 什么是税务学
  • 公积金贷款金额少怎么办
  • 小微企业应纳税所得额超过300万怎么办
  • 计税依据的定义
  • 社保免征还需要申报吗
  • 劳务费属于印花税范围吗
  • 增值税纳税申报表附列资料(三)
  • 对公账户发工资1万要交税吗
  • 纳税申报现金流量表报错了可以重新申报吗
  • 股东投入的资金怎么做账
  • 外资企业的分支机构向总机构支付的管理费如何办理税前列支申请
  • 设置会计科目的步骤
  • 保险收入如何做账务处理?
  • 奖励给优质供应商会计处理怎么做?
  • 应收应付明细表模板图片
  • 网络报销
  • 企业转企业对公账户
  • 没通过认证的增值税发票是否能够记入成本抵扣
  • 销售不动产包括哪些内容
  • 对于税收会计记账科目应该如何设置?
  • 税务分析最常用的分析方法
  • 税控盘抵减税款怎么转出会计分录
  • 回单是会计还是出纳职责
  • 外币报表未分配利润折算
  • 预付帐款科目如何转平?
  • 我的初级备考经验--付出才有回报
  • 消费税的纳税地点在哪里
  • 建筑业购买材料入什么会计科目
  • 营改增后一般纳税人税率是多少
  • 策划公司费用怎么算
  • 园林绿化工程公司有哪些
  • 撤销权之诉需要哪些证据
  • 苹果mac电脑自带的软件
  • mac鼠标移动到角落立刻显示桌面
  • 至极加速
  • 固定资产减值判断标准
  • 包装物押金收入计入收入总额吗
  • 金融公司呆账对当事人有什么影响
  • 待摊费用每月怎么摊
  • 已提减值准备的固定资产报废怎么填写
  • 企业以物易物如何确认收入
  • thinkphp5.0框架
  • 带你看看房间英语怎么写
  • 其他应付款清账
  • 文心一言 VS ChatGPT
  • php5.6漏洞
  • 小企业发票打印流程
  • 基金管理人应当自与基金销售机构签订销售协议之日起
  • 公司的钱借给个人必须要有利息吗
  • 股权转让怎么查
  • 公司记账可以不开发票吗
  • 汇算清缴期间费用保险费是什么
  • php中isset函数作用
  • mysql是自动提交的吗
  • 装卸搬运的设备有哪些
  • 一般纳税人申请条件
  • sql server复制表数据
  • 公司员工兼职开公司
  • 其他应付款科目贷方登记发生的各种应付
  • mysql三种安装方式
  • 没有收到房租发票
  • 资产负债表其他应收款计算公式
  • 上年度记错科目怎么调整
  • 暂估入库后发票来不了
  • 交易性金融资产的入账价值
  • 商品未入库直接销售怎么记账
  • 待结算财政款项是什么科目
  • 银企对账如何操作
  • 营业外收入明细账图片
  • 原始凭证填制的基本内容
  • 提高系统能力
  • ubuntu怎么播放视频
  • centos7查看性能监控
  • win8.1怎么重新装系统
  • ExtJS Ext.MessageBox.alert()弹出对话框详解
  • 使用struts2+Ajax+jquery验证用户名是否已被注册
  • react navigate
  • 广州市地方税务局规费服务中心
  • ca登录的用户名和密码分别是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设