c++==与c的函数对比(4)

来源:互联网 发布:s7200plc密码破解软件 编辑:程序博客网 时间:2024/06/13 13:46

与c有区别的函数包括内联函数,函数重载,以及带默认参数函数之间的不同

内联函数:

在c语言中,利用的是宏函数来处理频繁使用的函数

宏函数:函数是宏定义
如:#define ADD (a,b) a+b

宏函数与自定义函数的区别:
宏函数:在预处理阶段就进行替换(用编译时间换取空间)
自定义函数:格式:int add(int a, int b),要分配空间,在编译时处理

在c++中内联函数的格式就是在类型名前加上inline
实现方法:将函数的内容搬到主程序中,即不需要跳转,直接在主程序中顺序运行。以空间换取运行时间。
这里写图片描述

函数重载

定义:相同的作用域,如果两个函数名称相同,而参数不同,我们把它们称为重载overload
条件:函数名相同,但形参类型或者形参个数或者形参顺序不同或者三者都不同。注意:函数的返回值不能作为函数重载的区别。

在c语言中,只要根据函数名选择调用即可。
在c++中,会连上形参的类型,调用不了c的函数

这里写图片描述

//name managling的意思是名字改编

实例:

#include<iostream>  usingnamespace std;  void fun(inta, intb)  {           cout<<"int fun"<<endl;  }  void fun(doublea, doubleb)  {           cout<<"double fun"<<endl;  }  //extern "C"表示不进行名字改编,否则编译的时候重载函数编译器会对其名字进行改编  #ifdef__cpluscplus  extern"C"  {  #endif  void fun(inta)  {           cout<<"xxxx"<<endl;  }  void fun2(doublea)  {           cout<<"yyyy"<<endl;  }  #ifdef__cpluscplus  }  #endif  int main(void)  {           fun(3,4);           fun(3.3, 4.4);           fun(3);           return 0;  }  

用extern c,在c++编译器中调用c的函数,并制作静态库:

#ifdef __cplusplus//gcc -c main.c//把代码编译为目标文件形式ar rcs libadd.a main.o//使用工具ar创建一个存档文件g++ demo.cpp -/add -L.//编译程序时把程序和liberr.a链接起来

带默认参数的函数

这里写图片描述

0 0