全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+调用C2009-06-26 15:31:11|分类:计算机|字号订阅以下是假设旧的C程序库C的头文件/*-c.h-*/#ifndef _C_H_#define _C_H_extern int add(int x, int y);#endifC的源文件/*-c.c-*/int add(int x, int y)return x+y;C+的调用/*-cpp.cpp-*/#include c.hvoid main()add(1, 0);这样编译会产生错误cpp.obj : error LNK2001: unresolved external symbol int _cdecl add(int,int) (email=?addYAHHHZ?addYAHHHZ/email),原因是找不到add的目标模块这才令我想起C+重载的函数命名方式和C函数的命名方式,让我们回顾一下:C中函数编译后命名会在函数名前加以_,比如add函数编译成obj文件时的实际命名为_add,而c+命名则不同,为了实现函数重载同样的函数名add因参数的不同会被编译成不同的名字例如int add(int , int)=addYAHHHZ,float add(float , float )=addYAMMMZ,以上是VC6的命名方式,不同的编译器会不同,总之不同的参数同样的函数名将编译成不同目标名,以便于函数重载是调用具体的函数。编译cpp.cpp中编译器在cpp文件中发现add(1, 0);的调用而函数声明为extern int add(int x, int y);编译器就决定去找email=addYAHHHZaddYAHHHZ/email,可惜他找不到,因为C的源文件把extern int add(int x, int y);编译成_add了;为了解决这个问题C+采用了extern C,这就是我们的主题,想要利用以前的C程序库,那么你就要学会它,我们可以看以下标准头文件你会发现,很多头文件都有以下的结构#ifndef _H#define _H#ifdef _cplusplusextern C #endifextern int f1(int, int);extern int f2(int, int);extern int f3(int, int);#ifdef _cplusplus#endif#endif /*_H*/如果我们仿制该头文件可以得到#ifndef _C_H_#define _C_H_#ifdef _cplusplusextern C #endifextern int add(int, int);#ifdef _cplusplus#endif#endif /* _C_H_ */这样编译/*-c.c-*/int add(int x, int y)return x+y;这时源文件为*.c,_cplusplus没有被定义,extern C 这时没有生效对于C他看到只是extern int add(int, int);add函数编译成_add(int, int);而编译c+源文件/*-cpp.cpp-*/#include c.hvoid main()add(1, 0);这时源文件为*.cpp,_cplusplus被定义,对于C+他看到的是extern C extern int add(int, int);编译器就会知道 add(1, 0);调用的C风格的函数,就会知道去c.obj中找_add(int, int)而不是email=addYAHHHZaddYAHHHZ/email;这也就为什么DLL中常看见extern C ,windows是采用C语言编制他首先要考虑到C可以正确调用这些DLL,而用户可能会使用C+而extern C 就会发生作用当原来的C语言写的头文件里面没有考虑这个问题的时候,可以写成这样:#include #include extern C #include sift.h#includ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车和观光列车司机考试内部培训模拟题库含答案必考点
- 2025年扬尘污染模拟试题及答案
- 2025年通信考试试题及答案
- 2025年药剂士试题及答案
- 网店托管协议书模板
- 2024年国开行考试真题
- 2025年新版食品抽样及检验试题及答案
- 2025年初级养老护理员职业鉴定考试题库(含答案)
- 2022BIM工程师考试真题9章
- 武城事业单位笔试真题2024
- 大疆无人机农用版培训课件
- 资源与环境约束下山东省海洋经济可持续发展对策研究的综述报告
- 立体空间构造设计
- GB/T 6391-2003滚动轴承额定动载荷和额定寿命
- GB/T 28733-2012固体生物质燃料全水分测定方法
- 通用机场业务简介课件
- 人教精通版五年级上册英语Lesson-19精编课件
- 人教版小学五年级语文上册期中试卷及答案
- 思想道德与法治第二章
- 工程结构荷载和可靠度设计原理课件
- 外观限度样品管理办法样板
评论
0/150
提交评论