#ifdef __cplusplus
extern “C”
{
#endif//代码#ifdef __cplusplus
}
#endif

解释:

(1)cpp中对函数的重载处理。在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,加入比如函数的返回类型等等.而在C中,只是简单的函数名字而已,不会加入其他的信息.也就是说:C++和C对产生的函数名字的处理是不一样的.

(2)C++之父在设计C++之时,考虑到当时已经存在了大量的C代码,为了支持原来的C代码和已经写好C库,需要在C++中尽可能的支持C,而extern"C"就是其中的一个策略。因此,为了在C++代码中调用用C写成的库文件,就需要用extern"C"来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。

(3)使用过程中,会用到#ifdef __cplusplus  #endif 对头文件进行定义声明,表示的意思是:如果这是一段cpp的代码,那么加入"extern "C"{"  和 " }"处理其中的代码,其中{ }内部的代码是通过extern"C"进行处理,所以在所有的头文件引用中,如果是CPP代码文件,就会自动调用g++进行编译,但是如果是C代码文件,自动调用gcc进行编译;

#ifdef __cplusplus extern “C” { #endif的作用!相关推荐

  1. “#ifdef __cplusplus extern C { #endif”的定义(zz)

    "#ifdef __cplusplus extern "C" { #endif"的定义 看一些程序的时候老是有 "#ifdef __cplusplus ...

  2. #ifdef __cplusplus extern C { #endif”的定义的含义

    看一些程序的时候老是有 "#ifdef __cplusplus extern "C" { #endif"的定义,搞搞清楚是怎么回事: Microsoft-Spe ...

  3. #ifdef __cplusplus extern C { #endif”的定义

    平时我们在linux c平台开发的时候,引用了一些Cpp或者C的代码库,发现一些头文件有如下代码条件编译. #ifdef __cplusplus extern "C" { #end ...

  4. 第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ })

    C++.C编译器对函数编译的相关知识:C++支持函数重载,而C不支持,两者的编译规则也不一样.函数被C++编译后在符号库中的名字与C语言的不同.例如,假设某个函数的原型为: void foo( int ...

  5. c语言中endif的作用,C语言中#ifdef,#ifndef和#endif的作用

    现在规定一下头文件书写规范, 根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中.否则如果出现有定义,比如头文件中有int a =2;如果有多个 ...

  6. #ifdef __cplusplus extern “C”的作用详解

    https://blog.csdn.net/dayou1024/article/details/107017432

  7. C语言中#ifdef,#ifndef和#endif的作用

    1.用于注释掉一段代码 我们自己编写程序的时候,需要看到一系列的调试代码,但是发给客户的时候,客户可不希望看到什么什么OK的代码,所以我们希望能很容易地注释掉这段代码. 这时需要用到预处理指令 #if ...

  8. c++ 中extern C 及#ifdef __cplusplus的作用

    浅析extern "C"的作用 关于extern "C"的作用和意思,网上资料已经有很多了(我也参考了几篇),不过我还是觉得有必要自己总结一下,毕竟" ...

  9. 关于“#ifdef __cplusplus” 和 extern C 的问题

    转载自:https://blog.csdn.net/u012234115/article/details/43272441 时常在cpp的代码之中看到这样的代码: [cpp] view plainco ...

最新文章

  1. ElasticSearch 2 (37) - 信息聚合系列之内存与延时
  2. 用 Docker Machine 创建 Azure 虚拟主机
  3. MSChart中转义符
  4. python大神推荐_大神推荐!!!高评分书籍轻松带你入门Python
  5. Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
  6. 消息模板取数据的高阶使用说明
  7. yytextview多种格式_YYText之图文混排
  8. 根据经纬度算两点距离
  9. 2010-2012迷你博客
  10. springboot项目打包报错
  11. 电商数仓(dwt 层)
  12. java缓存框架zookepper_Zookeeper分布式开源框架
  13. vscode 插件 leetcode 登录失败问题
  14. ShaderJoy —— “水面波纹消散” 的实现 【GLSL】
  15. github使用指南(史上最全)
  16. 【渝粤教育】电大中专新媒体营销实务 (4)作业 题库
  17. 计算机网络---TCP序列号和确认号
  18. PC市场如何再起波澜?荣耀的创新或是答案
  19. CMS几种GC模式解读
  20. 出现 DB2 SQL Error: SQLCODE = -798, SQLSTATE = 428C9 错误的原因及解决方法

热门文章

  1. MySQL 搜索指定时间范围数据, 时间字段有索引但是还是很费时
  2. NSAssert的使用
  3. Luogu 2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
  4. BZOJ.3257.树的难题(树形DP)
  5. [SCOI2005]扫雷
  6. Hibernate 一对一关联关系
  7. 我对NHibernate的感受(2):何必到处都virtual
  8. 升级GCC 4.6后的warning: ”variable set but not used“
  9. Java 集合中的方法性能分析
  10. Vue creatElement