1、extern "C"

extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。

#ifdef __cplusplus /* 如果采用了C++,如下代码使用C编译器 */
extern "C" { /* 如果没有采用C++,顺序预编译 */
#endif
/* 采用C编译器编译的C语言代码段 */
#ifdef __cplusplus /* 结束使用C编译器 */
}
#endif

2、关键字extern

是全局变量声明,只要声明全局变量就默认前面加extern(程序员可以不加,但编译器默认加上)。若本文件 引用别的文件中的全局变量 一定要加上extern 声明一下。

例如:

#include "my_Fun.c"
extern int b; //b是在my_Fun.c中声明了的一个全局变量

这个extern 是个声明可以在任何地方声明,引用了一个全局变量 (可以试试 在main()函数执行完之后声明 也不会出错)

这样在 工程的总头文件中就不需要考虑 先#include 哪个文件了。

最新文章

  1. [Android]Android端ORM框架——RapidORM(v2.0)
  2. 远程桌面时plsql的复制粘贴功能失效
  3. Using Call_Form in Oracle D2k
  4. 学习Sass之安装Sass(一)
  5. Jmeter组件执行顺序与作用域
  6. UIView.frame的骗局
  7. [MySQL] 按日期进行统计(前一天、本周、某一天)
  8. 创业公司Playcafe关门大吉 创始人总结10大失败教训
  9. 手机端QQ客服直接跳转到QQ
  10. java静态成员的初始化过程
  11. css3的transition效果和transfor效果
  12. SQL SERVER存储过程生成字母+数字的编码
  13. UVa 1354 Mobile Computing | GOJ 1320 不加修饰的天平问题 (例题 7-7)
  14. jQuery与CheckBox的值一致就选中
  15. 【BZOJ1003】物流运输(动态规划,最短路)
  16. vue中的指令
  17. Mac自动化环境
  18. 《剑指offer》 包含min函数的栈
  19. BZOJ4456/UOJ#184[Zjoi2016]旅行者 分治 最短路
  20. 一款非常不错的重写listctrl类-CListCtrlEx

热门文章

  1. IE, Firefox下,checkbox的钩钩一旦勾上,画面再刷新,钩钩还是勾上的解决方案
  2. 转 - ubuntu 安装node.js 与 npm
  3. Oracle创建数据库链接
  4. mysql 笔记分享
  5. 存储设备的DDP功能详解
  6. sql server不要插入大数据,开销太大
  7. python学习之----用虚拟环境保存库文件
  8. 命令查询职责分离(CQRS)模式
  9. leetcode202
  10. 机器学习入门-线性判别分析(LDA)1.LabelEncoder(进行标签的数字映射) 2.LinearDiscriminantAnalysis (sklearn的LDA模块)