与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链接起来