extern "C" 理解

/******tset.h******/
#pragma once#ifdef __cplusplus
extern "C" {#endif#include <stdio.h>
void Show();#ifdef __cplusplus
}
#endif/******tset.c******/
#include "tset.h"void Show()
{printf("hello world\n");
}/******externTset.cpp******/
#include <iostream>
#include "test.h"using namespace std;int main()
{Show();return 0;
}

    由于在C++中函数是可以发生重载的,所以在编译时,编译器往往会将函数的形参与函数名以某种形式结合在一起,例如void func(int a, int b)可能会被编译成_func_i_i,然后再在链接阶段去.obj文件中寻找该函数。而C语言的函数没有重载机制,所以编译的时候只会用函数名来做标记,例如void func(int a, int b)可能会被编译成_func。
   针对上面这个例子,如果没有用extern “C”,那么externTset在进行链接时,仍会采用C++的链接机制,会去test生成的.obj文件中找类似_Show_v的函数,很明显这是无法找到的,因为按照C语言的编译机制,Show函数只会被编译成类似_Show的样子。
   但是在加上extern "C"之后,externTset在进行链接时就会按照C的链接方式去test生成的.obj文件中找类似_Show的函数,这样就能找到。

extern “C“ 理解相关推荐

  1. 2021最稳C/C++学习路线

    大家好,我是唐唐. 此篇文章关于 C/C++/Linux后端开发的全路线. 前言 于我而言,最开始学习就是 C++,除了计算机专业,其他专业可能学习的第一门编程语言为 C 语言,还是谭浩强爷爷那本,当 ...

  2. 51单片机---一起来学习DS1302可调时钟(stc89c52芯片)

    DS1302是一个实时时钟芯片,带有一个备用电池,在单片机不工作的时候继续走时:单片机 自带的定时器时钟并不能够调电继续运行,不能断电,然而这个时钟芯片带有备用电池,会给1302继续提供电流.(在主电 ...

  3. C语言extern关键字用法和理解

    extern表明变量或者函数是定义在其他其他文件中的 例如:extern int a; 显式的说明了a的存储空间是在程序的其他地方分配的,在文件中其他位置或者其他文件中寻找a这个变量. 用法 一个c文 ...

  4. 深入理解extern用法

    from:https://blog.csdn.net/z702143700/article/details/46805241 一. extern做变量声明 l  声明extern关键字的全局变量和函数 ...

  5. c++中extern用法-个人理解

    1.在头文件中外部声明 例 在test.h中 extern bool flag: 在test.cpp中外部定义 #include <test.h> bool flag = true; 在其 ...

  6. extern数组与extern指针

    数组名代表了存放该数组的那块内存,它是这块内存的首地址.这就说明了数组名 是一个地址,而且,还是一个不可修改的常量,完整地说,就是一个地址常量.数组名 跟枚举常量一样,都属于符号常量.数组名 这个符号 ...

  7. C++中extern C的使用

    C++程序有时需要调用其它语言编写的函数,最常见的是调用C语言编写的函数.像所有其它名字一样,其它语言中的函数名字也必须在C++中进行声明,并且该声明必须指定返回类型和形参列表.对于其它语言编写的函数 ...

  8. 嵌入在C++程序中的extern C

    1.extern的作用 extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,可以告知编译器,用extern声明的函数和变量可以在本模块或其它模块中使用. 通常,在模块的头文件中 ...

  9. [深入理解Android卷一全文-第九章]深入理解Vold和Rild

    为什么80%的码农都做不了架构师?>>>    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的 ...

最新文章

  1. okhttp配置缓存策略_网站的缓存控制策略最佳实践及注意事项
  2. 微信开发-ACCESS TOKEN 过期失效解决方案
  3. Python: tkinter实例改名小工具
  4. 如何HttpWebRequest模拟登陆,获取服务端返回Cookie以便登录请求后使用
  5. php重写curl_setopt函数,PHP curl_share_setopt函数
  6. 奥鹏19春计算机应用基础,19春西南交《计算机应用基础》在线作业二(答案)-...
  7. codeforces 558D Guess Your Way Out! II 规律
  8. 塞雷三分钟漫画中国史1
  9. wamp php 教程,WAMP 添加php新版本
  10. Jquery实现弹幕效果
  11. 变焦 焦距 等效焦距
  12. (十五:2020.08.28)CVPR 2013 追踪之论文纲要(译)
  13. Android宠领养社区(源码+视频教程)
  14. 基于STM32的指纹锁
  15. x-admin前端模板左侧菜单栏消除记忆功能(清除缓存)
  16. 电商项目--------------------商品(SKU)规格、价格功能
  17. 以ofo为代表的共享经济退烧后,风投目光转向了芯片!
  18. 完美世界2017C++游戏开发笔试编程题
  19. 带空格的字符串输入处理
  20. 开源笔记编辑器MarkText安装,设置GitHub图床

热门文章

  1. 手动删除Win10更新文件
  2. 网站专题页SEO优化来抢占海量长尾词排名
  3. 爱旅行项目中使用solr实现酒店搜索
  4. 全国计算机二级公共基础知识电子版,全国计算机二级office公共基础知识资料
  5. 12306 验证图片模式网摘思路
  6. 认识条码(一):UPC和EAN
  7. vue,uni-app 移动端UI框架(组件库)
  8. 视频合并分割软件如何剪切视频
  9. 一物一码如何实现数字化营销
  10. ThreadLocal详解分析