您的位置:首页 > 编程语言 > C语言/C++

C和C++的区别 02.函数检测

2017-03-21 09:29 791 查看
C和C++在函数方面的区别主要体现在三个方面:函数检测、内联函数和函数重载。

函数检测

C++中所有的变量和函数都必须有类型,C语言中的默认类型在C++中是不合法的。

在C语言中

f();表示返回值为int,接受任意参数的函数

f(i);表示返回值和参数都默认为int。

int f(void);表示返回值为int的无参函数

C++中

int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数

C++更加强调类型,任意的程序元素都必须显示指明类型

//C语言中
#include <stdio.h>

f(i)//默认参数类型为int
{
printf("i = %d\n", i);
}

g()//默认返回值为int
{
return 5;
}

int main(int argc, char *argv[])
{
f(10);
printf("g() = %d\n", g(1, 2, 3, 4, 5));
getchar();
return 0;
}


默认参数和占位符

//C++中如果函数定义时设置了默认值,而调用时没有提供值,系统则会根据默认值初始化实参。
void Func(int i = 1, float f = 2.0f, double d = 3.0)
{
cout << i << ", " << f << ", " << d << endl ;
}

int main(void)
{
Func() ; // 1, 2, 3
Func(10) ; // 10, 2, 3
Func(10, 20.0f) ; // 10, 20, 3
Func(10, 20.0f, 30.0) ; // 10, 20, 30return 0 ;
}


但是只有后部分参数可以。如果某个参数是默认参数,则后面的参数都必须是默认参数。

//下面两种情况都可以
void Func(int i, float f = 2.0f, double d = 3.0) ;
void Func(int i, float f, double d = 3.0) ;
//但是这样就不可以
void Func(int i, float f = 2.0f, double d) ;


函数占位参数

/*
占位参数表示只有参数类型,而没有参数名。
一般情况下,在函数体内部无法使用占位参数
*/

int func(int a, int b, int )
{
return a + b;
}

int main(int argc, char *argv[])
{
//调用的时候还是要当成三个参数,虽然第三个参数没用,但是位置要留着。
printf("func(1, 2, 3) = %d\n", func(1, 2, 3)); // 可以
printf("func(1, 2) = %d\n", func(1, 2));    // 不可以

printf("Press enter to continue ...");
getchar();
return 0;
}


/*
可以将占位参数与默认参数结合起来使用。
意义:
为以后程序的扩展留下线索(不常使用)
兼容C语言程序中可能出现的不规范写法
*/

//C++可以声明占位符参数,占位符参数一般用于程序扩展和对C代码的兼容

int func(int a, int b, int = 0)  //int = 0:默认+占位参数(混搭)
{
return a + b;
}

int main(int argc, char *argv[])
{
printf("func(10, 20) = %d\n", func(10, 20)); // 可以
func(10, 20, 30);//可以

printf("Press enter to continue ...");
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++-函数