一、函数的声明
►当要调用函数时,C++语言规定在调用一个函数之前必须有该函数的声明。
►C++规定函数的定义既是函数定义,也是函数声明。换言之,只要函数调用是写在函数定义的后面,就自然有了函数声明;若调用在定义之前,在调用之前需写出函数原型(声明)。
►声明的作用是程序向编译器提供函数的接口信息,因而多次提供接口信息是允许的,但不能提供相互矛盾、语义不一致的接口信息。
如:平方根运算
#include <iostream> //标准输入输出函数库
#include <cmath> //数学函数库
using namespace std; //使用标准命名空间
double root(double x, double y) //root函数求x-y的平方根
{ if(x>=y) return sqrt(x-y);//只有在x大于等于y时计算x-y的平方根
else return 0; //否则返回0
}
int main() //主函数
{
double a, b; //定义两个浮点型变量
cin >> a >> b ;//输入两个数
cout << root(a,b) << endl; //输出a-b的平方根
return 0; //主函数正常结束返回0
}
函数原型
►函数原型(function prototype)的作用:提供函数调用所必须的接口信息,使编译器能够检查函数调用中可能存在的问题,有两种形式:
►①第一种形式: 返回类型 函数名(类型1 形参1,类型2 形参2,……);
►②第二种形式:返回类型 函数名(类型1 ,类型2 ,……);
如:求m,n的最大公约数 (欧几里得算法)
#include <iostream>
using namespace std;
int gcd(int m, int n); //gcd函数原型,gcd函数声明在前
int main()
{
int m,n;
cin>>m>>n;
cout<<gcd(m,n)<<endl; //调用时已有gcd函数声明
return 0;
}
int gcd(int m, int n) //求最大公约数,gcd函数实现在后
{
int r;
while (n!=0) { //欧几里德算法,原理是:
r = m % n ; //r为m/n的余数
m = n ; //则gcd(m,n)=gcd(n,r)=...
n = r ; //r=0时n即是gcd
}
return m;
}
输出:m=9, n=6
① r=3, m=6, n=3 ② r=0, m=3, n= 0
函数调用
►有了函数声明,就可以调用函数,有参数函数调用的形式为:函数名(实参列表);
►实参可以是常量、变量、表达式和函数调用,各实参之间用逗号 (,)分隔。实参的类型、次序、个数应与形参一致。
►在C++语言中,可以用以下几种方式调用函数。
(1)函数表达式。
z = max(x,y);
(2)函数调用语句。(多为调用无返回值函数)
max(x,y);
(3)函数实参
m=max(max(x,y),z);
内联函数
内联函数的声明是在函数定义的类型前加上inline修饰符,定义形式为:
inline 返回类型 函数名(形式参数列表)
{
函数体
}
注意:
内联函数中不允许用循环语句和switch语句。
内联函数的声明必须出现在内联函数第一次被调用之前。
#include <iostream>
using namespace std;
inline int fun(int a,int b) //内联函数
{
return a*a+b*b;
}
int main()
{
int n=5,m=8,k;
k = fun(n,m); //调用点嵌入 a*a+b*b 代码,即:k=n*n+m*m
cout<<"k="<<k<<endl;
return 0;
}
函数定义与声明的具体区别:函数的定义与声明的区别_不吃玉米尖尖的博客-CSDN博客_函数声明和定义的区别