return0;
}
⑸函数参数也可用const说明为常量,以保证实参在函数内部不被修改。
⑹ANSIC标准也采用了const,但两者是有区别的,如下面的程序段在C++中是合法的,而在ANSIC中是不合法的:
constintsize=10;
intch[size];
另外,在ANSIC中const定义的常量是全局常量,而C++中const定义的常量要根据定义的位置来决定是局部的还是全局的。
1.3.8函数原型
C语言建议程序的编制者为程序中的每个函数建立原型,而C++则要求必须为每个函数建立原型,说明函数的返回值类型、函数名称、参数类型及个数。
主要目的是在编译时检查调用函数是否与预先说明的原型一致,以维护程序的正确性。
函数原型的一般格式为:
返回类型函数名(参数表);
参数表包括所用的参数和他们的类型,参数之间用逗号分开。
例1.5函数原型声明的例。
#include
voidprint(char*s);
voidmain()
{
print(“hello,lanzhou!
”);
}
voidprint(char*s)
{cout<
使用函数原型时应注意以下问题:
⑴函数原型是一条语句,必须以分号结束。
⑵函数原型的参数表中可以不包括参数的名字而只包括它们的类型,如语句longaree(int,char);是合法的。
但函数定义中函数说明部分的参数必须给出名字,并且不能以分号结尾。
⑶在程序中,函数原型要求出现在函数调用之前,但当一个函数的定义在前而调用在后时,可以不单独给出它的原型,此时的函数定义的说明部分就起到了函数原型的作用。
⑷主函数不必说明原型,它被认为是一个自动说明原型的函数,且不存在被调用的问题。
⑸C++的参数说明必须放在函数名后的括号内,不能放在函数说明部分与函数体之间,如下面的程序在编译时将会出错:
#include
voidprint(int,char);
voidmain()
{print(“hello,china!
”);}
voidprint(ch)
charch;//错误的参数说明方式
{cout<⑹原型中没有说明返回类型的函数(包括主函数main),C++默认它的返回类型为int,因此,下面的圆形说明在C++中是等价的:
cat(int,char);//默认返回整型数
intcat(int,char);//指明返回整型数
⑺如果一个函数没有返回值,则必须在函数原型中注明返回类型为void。
当主函数没有返回值时,可以在main()前注明void,这样主函数中就不必有“return0”之类的返回语句了。
⑻如果原型中没有注明参数,C++假定给函数的参数表为空(void),因此,下面的原型说明在C++中是完全一样的:
f();//表示该函数不带任何参数
f(void);//表示该函数不带任何参数
但在C中,上述两个原型说明是不同的:
f();//表示该函数的参数没有给出,它可能有多个参数
f(void);//表示该函数不带任何参数
1.3.9内联函数
C++提供了内联函数,在程序中调用内联函数时,编译器就用该函数的函数体中的代码替代函数调用表达式,这样,不但减少了函数调用时保留现场所用的开销,而且提高了程序的运行效率,同时消除了使用宏定义#define带来的不安全性(产生这个问题的原因是,C中宏定义#define的代码是被直接展开的,而C++的内联函数的代码是被替代的)。
要声明一个函数为内联函数,只要在函数说明的前面冠以关键字”inline”就行了。
下面的程序中就定义了一个内联函数:
#include
inlinef