C++杂忆集(六)
来源:互联网 发布:卖家怎么开淘宝客 编辑:程序博客网 时间:2024/06/05 22:46
C++与C混合编程中的extern "C"
在我们使用C++为主体,混合使用C语言进行编程的时候,对于初学者而言最常遇见的一个问题是在编译的过程中,无法连接到目标函数。这是为什么呢?这我们就需要知道另一件事情,C++支持函数重载。
C++的函数重载究竟是如何实现的呢?其实在C++源码中的函数名称并非是编译后的名称,实际上这种处理是编译器做的,隐蔽而又常被人们忽略。C++编译器会给我们所写的函数添加前后缀,而且是和函数参数列表密切相关的。C语言不支持重载,编译后的目标函数名就是源码中所给的函数名。
这时候,我们就需要明确的告知编译器,将要连接的是C函数,这时候就需要用到extern关键字了。例如在某个C++的头文件中我们声明一个函数,并且是C函数:
这样便可以通过编译了,其实并不仅仅用于修饰C语言的函数,也可以用于变量,目的就是告知编译器,以下的代码块需要按照C语言方式编译和连接。
在我们使用C++为主体,混合使用C语言进行编程的时候,对于初学者而言最常遇见的一个问题是在编译的过程中,无法连接到目标函数。这是为什么呢?这我们就需要知道另一件事情,C++支持函数重载。
C++的函数重载究竟是如何实现的呢?其实在C++源码中的函数名称并非是编译后的名称,实际上这种处理是编译器做的,隐蔽而又常被人们忽略。C++编译器会给我们所写的函数添加前后缀,而且是和函数参数列表密切相关的。C语言不支持重载,编译后的目标函数名就是源码中所给的函数名。
这时候,我们就需要明确的告知编译器,将要连接的是C函数,这时候就需要用到extern关键字了。例如在某个C++的头文件中我们声明一个函数,并且是C函数:
#ifndef ___ABC_H__#define ___ABC_H__extern "C"// 明确告知编译器,无需转换格式,该函数为C语言格式的函数{int Func_C(int i);}#endif
这样便可以通过编译了,其实并不仅仅用于修饰C语言的函数,也可以用于变量,目的就是告知编译器,以下的代码块需要按照C语言方式编译和连接。
阅读全文
0 0
- C语言(六)
- Unix C (六)
- C练习(六)
- 《Effective C++》(六)
- C三道题(六)
- C语言库函数(六)
- C核心技术手册(六)
- C++Primer读书笔记(六)
- C++primer笔记(六)
- 《Essential C++》读书笔记(六)
- C专家编程(六)
- 标准C程序设计(六)
- C语言笔记(六)
- 《c和指针》(六)
- C语言(六)--数组
- c语言基础(六)
- Eclipse for C/C++(六)调试
- C/C++面试题六(经典)
- Java 修饰符
- UVA116
- 基于Apache服务器的文件列表,即文件的http下载模式
- CMD下操作VPN
- js正则表达式
- C++杂忆集(六)
- HDU 6162 Ch’s gift(LCA 暴力 17多校第九场)
- 出现 libcaffe.so.1.0.0-rc5: cannot open shared object file
- Banner
- 用new调用函数的执行过程
- 【Redis手册四】Redis 数据类型
- Pre-Post-erous!
- sftpDrive1.7.9注册码
- bzoj4145 [AMPPZ2014]The Prices 状压dp