分类: C/C++
2008-11-24 10:28:40
c++对传统的C函数说明作了一些改进。这些改进主要是为了面向对象机制的要求,以及可靠性、易读性的要求。
1.main()
c并无特别规定main()函数的格式,因为通常并不关心返回何种状态给操作系统。然而,C++却要求main()函数匹配下面两种原型之一:
void main()
int main(int argc,char*argv[ ])
2.函数原型
函数原型(prototyping)的概念在前面章节已提及,其实ANSI c正是从c++中借用了这一做法。函数原型实际上就是对函数的头格式进行说明,包含函数名、参数及返回值类型。
传统C中的函数说明只是定义函数的返回值的类型,并不涉及参数,如:
int something();
而在C++中的函数说明应是详细的头格式:
int something(char*str,unsigned int len);
有了函数原型编译程序方能作强类型检查,从而确保函数调用的实参类型与要求的类型相符。早期的C正是缺乏这种强类型检查,很容易造成非法参数值传递给函数,造成程序运行时不可预料的错误。
ANSIC只是允许使用原型,而C++却要求必须使用原型。在C++中,原型不仅仅为了保证参数匹配,当几个函数同名时,函数重载需要用到原型参数提供的信息,生成内部函数名来区分它们。
对于传统的函数头形式,虽然C++接受,但仍建议使用类似原型的函数头,也就是函数一章中所提及的现代形式。显然,C++的风格比c更易于理解。另一方面,有可能在以后的C++版本中,早期C的风格会被完全放弃。
3.内联函数
以前的函数调用,导致了一定数量的额外开销,如参数压栈、出栈等。有时,正是这种额外开销迫使c程序员在整个程序中复制代码以提高效率。c++的内联函数(inline function)正是为了解决这一问题而提供的。
当函数定义是由inline开头时,表明此函数为内联函数。编译后,它不是单独一段可调
用的代码,而是被插入在对该函数的每一次调用处,从而完成与函数调用相同的功能。
例如:
inline int sum(int a,int b)
{return a+b;}
这样函数调用无需栈,代码重用。
要注意的是,内联函数必须在它被调用之前定义,否则编译不会得到预想的结果。
4.缺省参数值
C++对C函数的一大重要的改进之一就是可以为函数定义缺省的参数值。
看下面的程序:
void delay(int loops 1000);//函数原型,给出缺省的参数值
void delay(int loops)//函数定义
{for(int i=0;i
delay(4500);//loops值为4500
delay();//loops值为1000
一个C++函数可以有多个缺省参数,并且C++要求缺省参数必须连续地放在函数参数表的尾部。当调用具有多个缺省参数时,只能由左向右匹配,并且必须是连续的。
1.main()
c并无特别规定main()函数的格式,因为通常并不关心返回何种状态给操作系统。然而,C++却要求main()函数匹配下面两种原型之一:
void main()
int main(int argc,char*argv[ ])
2.函数原型
函数原型(prototyping)的概念在前面章节已提及,其实ANSI c正是从c++中借用了这一做法。函数原型实际上就是对函数的头格式进行说明,包含函数名、参数及返回值类型。
传统C中的函数说明只是定义函数的返回值的类型,并不涉及参数,如:
int something();
而在C++中的函数说明应是详细的头格式:
int something(char*str,unsigned int len);
有了函数原型编译程序方能作强类型检查,从而确保函数调用的实参类型与要求的类型相符。早期的C正是缺乏这种强类型检查,很容易造成非法参数值传递给函数,造成程序运行时不可预料的错误。
ANSIC只是允许使用原型,而C++却要求必须使用原型。在C++中,原型不仅仅为了保证参数匹配,当几个函数同名时,函数重载需要用到原型参数提供的信息,生成内部函数名来区分它们。
对于传统的函数头形式,虽然C++接受,但仍建议使用类似原型的函数头,也就是函数一章中所提及的现代形式。显然,C++的风格比c更易于理解。另一方面,有可能在以后的C++版本中,早期C的风格会被完全放弃。
3.内联函数
以前的函数调用,导致了一定数量的额外开销,如参数压栈、出栈等。有时,正是这种额外开销迫使c程序员在整个程序中复制代码以提高效率。c++的内联函数(inline function)正是为了解决这一问题而提供的。
当函数定义是由inline开头时,表明此函数为内联函数。编译后,它不是单独一段可调
用的代码,而是被插入在对该函数的每一次调用处,从而完成与函数调用相同的功能。
例如:
inline int sum(int a,int b)
{return a+b;}
这样函数调用无需栈,代码重用。
要注意的是,内联函数必须在它被调用之前定义,否则编译不会得到预想的结果。
4.缺省参数值
C++对C函数的一大重要的改进之一就是可以为函数定义缺省的参数值。
看下面的程序:
void delay(int loops 1000);//函数原型,给出缺省的参数值
void delay(int loops)//函数定义
{for(int i=0;i
delay(4500);//loops值为4500
delay();//loops值为1000
一个C++函数可以有多个缺省参数,并且C++要求缺省参数必须连续地放在函数参数表的尾部。当调用具有多个缺省参数时,只能由左向右匹配,并且必须是连续的。