* 数据结构的兼容性
最后一个问题是在C++和C之间传递数据 。不可能让C的函数了解C++的特性的,它们的交互必须限定在C可表示的概念上 。因此,很清楚,没有可移植的方法来传递对象或传递指向成员函数的指针给C写的函数 。但是,C了解普通指针,所以想让你的C++和C编译器生产兼容的输出,两种语言间的函数可以安全地交换指向对象的指针和指向非成员的函数或静态成员函数的指针 。自然地 , 结构和内建类型(如int、char等)的变量也可自由通过 。
因为C++中的struct的规则兼容了C中的规则 , 假设“在两类编译器下定义的同一结构将按同样的方式进行处理”是安全的 。这样的结构可以在C++和C见安全地来回传递 。如果你在C++版本中增加了非虚函数,其内存结构没有改变,所以,只有非虚函数的结构(或类)的对象兼容于它们在C中的孪生版本(其定义只是去掉了这些成员函数的申明) 。增加虚函数将结束游戏 , 因为其对象将使用一个不同的内存结构(参见Item M24) 。从其它结构(或类)进行继承的结构,通常也改变其内存结构,所以有基类的结构也不能与C函数交互 。
就数据结构而言,结论是:在C++和C之间这样相互传递数据结构是安全的--在C++和C下提供同样的定义来进行编译 。在C++版本中增加非虚成员函数或许不影响兼容性,但几乎其它的改变都将影响兼容 。
* 总结
如果想在同一程序下混合C++与C编程 , 记住下面的指导原则:
* 确保C++和C编译器产生兼容的obj文件 。
* 将在两种语言下都使用的函数申明为extern 'C' 。
* 只要可能,用C++写main() 。
* 总用delete释放new分配的内存;总用free释放malloc分配的内存 。
* 将在两种语言间传递的东西限制在用C编译的数据结构的范围内;这些结构的C++版本可以包含非虚成员函数 。
c语言如何实现函数的调用函数名加(实参),这样吧...举个例子你看一下...
int add(int x,int y)
{
int x,y;
int z;
z=x+y;
return z;
}//定义一个z=x+y的函数
int main()//主函数
{
int a=10,b=20;
int m;
m=add(a,b);//这句就是函数的调用...调用了add函数
printf("%d",m);
return m;
}
理解了没...还没的话...仔细看下教材...这个问题很容易解决的...
关于c语言调用编译器的函数和在编译器调用函数时选择函数的依据的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 关于疫情小超市如何营销,疫情期间超市的经营状况
- 关于postgresql合并text的信息
- 鸿蒙系统能安装苹果app么,鸿蒙系统能装苹果手机吗
- 房地产项目如何介绍ppt,房地产项目宣讲ppt
- php向电脑发送数据 php向电脑发送数据的命令
- gis中连接字段失败,gis连接数据库失败,常规功能故障
- 新媒体家装行业前景如何,新媒体行业赚钱吗
- redis和nio,redis怎么启动
- mysql中怎么进行分组 mysql 分组语句