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

  • 华为hry-al00t是华为什么型号的手机

    华为hry-al00t是华为什么型号的手机

  • 一个微信加好友上限是多少(一个微信加好友几天过期)

    一个微信加好友上限是多少(一个微信加好友几天过期)

  • 微信步数是一天更新一次吗(微信步数一天五万步正常吗)

    微信步数是一天更新一次吗(微信步数一天五万步正常吗)

  • 快手上的精彩评论是什么意思(快手优秀评论语句)

    快手上的精彩评论是什么意思(快手优秀评论语句)

  • 为什么p40拍照不清楚(p40拍照不行)

    为什么p40拍照不清楚(p40拍照不行)

  • 苹果平板不用id怎么下载东西(苹果平板不用id密码可以下载吗)

    苹果平板不用id怎么下载东西(苹果平板不用id密码可以下载吗)

  • 三星听筒声音小解决方法(三星听筒声音小必须按免提)

    三星听筒声音小解决方法(三星听筒声音小必须按免提)

  • 电脑重装系统后连不上打印机(电脑重装系统后无法连接网络)

    电脑重装系统后连不上打印机(电脑重装系统后无法连接网络)

  • 华为手机里删除的照片能恢复吗(华为手机里删除的录音文件怎么恢复)

    华为手机里删除的照片能恢复吗(华为手机里删除的录音文件怎么恢复)

  • 淘宝卖家快递费怎么谈(淘宝卖家快递费大概是多少)

    淘宝卖家快递费怎么谈(淘宝卖家快递费大概是多少)

  • 缩小快捷键ctrl加什么(缩小快捷键cad)

    缩小快捷键ctrl加什么(缩小快捷键cad)

  • wps打开word公式没了(wps的公式word能正常显示吗)

    wps打开word公式没了(wps的公式word能正常显示吗)

  • 淘宝运营需要做些什么(做淘宝运营需要会什么)

    淘宝运营需要做些什么(做淘宝运营需要会什么)

  • 6s跟7有什么区别(6s跟7有什么区别手机壳一样吗)

    6s跟7有什么区别(6s跟7有什么区别手机壳一样吗)

  • 拼多多怎么换号登录(拼多多怎么换号注册)

    拼多多怎么换号登录(拼多多怎么换号注册)

  • 快手刷礼物记录怎么看(快手刷礼物记录怎么删除掉)

    快手刷礼物记录怎么看(快手刷礼物记录怎么删除掉)

  • 手机连爱思助手没反应(手机连爱思助手不弹信任)

    手机连爱思助手没反应(手机连爱思助手不弹信任)

  • 什么是微视频(什么是微视频教学)

    什么是微视频(什么是微视频教学)

  • 微信删除账单为什么要人脸识别(微信删除账单为什么没有其他验证方式)

    微信删除账单为什么要人脸识别(微信删除账单为什么没有其他验证方式)

  • 拼多多为什么要拼单(拼多多为什么要填写姓名和身份证号)

    拼多多为什么要拼单(拼多多为什么要填写姓名和身份证号)

  • 体重秤充电多长时间(体重秤充电多长时间最好用)

    体重秤充电多长时间(体重秤充电多长时间最好用)

  • win11预览版怎么升级正式版吗?Win11预览版直接升级到正式版本方法(win11预览版怎么变回正式版)

    win11预览版怎么升级正式版吗?Win11预览版直接升级到正式版本方法(win11预览版怎么变回正式版)

  • vue导出word(vue导出word文档打开报错,内容有问题)

    vue导出word(vue导出word文档打开报错,内容有问题)

  • 增值税开票软件在哪下载
  • 企业投资收益要开发票吗
  • 零售和批发的界定
  • 银行承兑汇票提前承兑收多少手续费
  • 增值税普票没有税号可以开吗
  • 过路费定额发票还能入账吗
  • 发票服务名称都有什么
  • 社会保险申报表中工资总额累计金额是什么意思
  • 新会计准则施行
  • 纳税人转登记期限
  • 最新企业准则
  • 收到供应商赔偿的违约金
  • 应交税费待抵扣进项税额
  • 18年补交17年城建税会计分录
  • 企业所得税弥补亏损年限
  • 出租的固定资产计提折旧
  • 重新建账要以前的期初余额吗
  • 购车合同起什么作用
  • 政府补贴可以税前扣除填写在哪里
  • 工程款税款税率
  • 预提租赁费会计处理
  • 股权投资损失怎么算出来的
  • 工业厂房的辅助用房
  • 住房公积金利息怎么算的
  • 应付政府补贴款名词解释
  • 资产负债应付账款怎么算
  • 办公家具会计分录怎么做
  • 企业所得税汇算表
  • 企业筹建期发生的费用有哪些
  • php504错误
  • 前端 教程
  • pytorch卷积操作
  • apdl命令流手册下载
  • 管理费用中的福利费有限额吗
  • 车子以旧换新
  • phpcms手机端
  • 企业用车年检需要什么资料
  • java 读写锁 map
  • mysql中触发器的创建有多个执行语句
  • mysql日期和时间类型
  • 银行转账支付中是什么状态
  • 什么视同小规模纳税人?
  • 一般纳税人需要报个税吗
  • sqlserver2008新建实例
  • mysql如何分类
  • 受托方代扣代缴增值税、消费税的纳税人
  • 建筑附加税税率
  • 制造费用明细科目大全表
  • 国税发1997191号文有效吗
  • 去年的管理费用多做了今年怎样调账
  • 固定资产不可以搬走,那什么资产能搬走的?
  • 坏账收不回来如何做分录
  • 没有销售怎么写总结
  • 计提是好是坏
  • 职工教育经费如何列支
  • 税务人员如何做好本职工作
  • access数据库sql语言
  • mysql 5.7.28安装
  • win8.1 开机进桌面
  • windows个性化定制包含
  • mac怎么安装新系统
  • xp系统的电脑无法启动
  • redhat linux6.5安装教程
  • windowsxp怎么查看用户名密码
  • nero recode
  • win10 ie浏览器双击没有反应
  • linux conio
  • Win10 Mobile RedStone预览版14267更新内容汇总(持续更新)
  • cocos2dx 地图
  • alt+r没用
  • android 布局
  • 批处理文件命令大全
  • relative absolute无法冲破的等级问题解决第1/3页
  • 详细解读了
  • jquery 点击按钮
  • u3d transform
  • JS Timing
  • 煤炭资源税税率调整
  • 甲供材备案需要的资料
  • 长沙买房后多久可以提取公积金
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设