Chinaunix首页 | 论坛 | 博客

  • 博客访问: 474073
  • 博文数量: 86
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 878
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 14:11
文章分类

全部博文(86)

文章存档

2010年(12)

2009年(60)

2008年(14)

我的朋友

分类: C/C++

2008-11-24 10:28:40

 c++对传统的C函数说明作了一些改进。这些改进主要是为了面向对象机制的要求,以及可靠性、易读性的要求。

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    函数原型中给出了loops的缺省值,所以若调用delay函数并没指定loops的值时,程序自动将它当作1000进行处理。
    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    函数原型中给出了loops的缺省值,所以若调用delay函数并没指定loops的值时,程序自动将它当作1000进行处理。
    delay(4500);//loops值为4500
    delay();//loops值为1000
    一个C++函数可以有多个缺省参数,并且C++要求缺省参数必须连续地放在函数参数表的尾部。当调用具有多个缺省参数时,只能由左向右匹配,并且必须是连续的。

阅读(722) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:浅谈C++函数的参数

给主人留下些什么吧!~~