C/C++ 混合编程
2024-08-30 01:49:25
1. C 调用 C++ 开发的DLL库
C和C++混合编程(__cplusplus 与 external “c” 的使用)
#ifdef __cplusplus
extern "C" {
#endif
/**** some declaration or so *****/
#ifdef __cplusplus
}
#endif /* end of __cplusplus */
除了对类的支持和面向对象的相关语法,C++ 与 C 还存在一些无法兼容的差异,由于CPP支持多态性,也就是具有相同函数名的函数可以完成不同的功能,CPP通常是通过参数区分具体调用的是哪一个函数。在编译的时候,CPP编译器会将参数类型和函数名连接在一起,于是在程序编译成为目标文件以后,CPP编译器可以直接根据目标文件中的符号名将多个目标文件连接成一个目标文件或者可执行文件。但是在C语言中,由于完全没有多态性的概念,C编译器在编译时除了会在函数名前面添加一个下划线之外,什么也不会做(至少很多编译器都是这样干的)。由于这种的原因,当采用CPP与C混合编程的时候,就可能会出问题。假设在某一个头文件中定义了这样一个函数:
int foo(int a, int b);
而这个函数的实现位于一个.c文件中,同时,在.cpp文件中调用了这个函数。那么,当CPP编译器编译这个函数的时候,就有可能会把这个函数名改成_fooii(多态性,函数名+参数类型联合指定),这里的ii表示函数的第一参数和第二参数都是整型。而C编译器却有可能将这个函数名编译成_foo。也就是说,在CPP编译器得到的目标文件中,foo()函数是由_fooii符号来引用的,而在C编译器生成的目标文件中,foo()函数是由_foo指代的。
最新文章
- nginx的日常应用
- Android 学习笔记
- nmap端口状态解析
- aehyok.com的成长之路一——开篇
- 解决 winform 界面对不齐 z
- 命令行界面下的用户和组管理之useradd和passwd命令的使用
- BeanFactory学习
- Windows上Python3.5安装Scrapy(lxml)
- python源文件转换成exe问题解决贴
- 打开word时出现the setup controller has encountered a problem during install解决办法
- 关于django1.8版本的静态文件配置
- VS2017
- Apk反编译助手
- linux基础知识的总结
- Windows下Linux 环境 Cygwin安装及配置 基本工具使用
- 亲热接触Redis-第二天(Redis Sentinel)
- VMware Workstation 14创建mac-10.12虚拟机详细步骤
- Quartz2D知识点聚合案例
- C# 设计模式,工厂方法
- Redis未授权访问漏洞复现