首页 > 编程笔记

C++函数(声明、定义和调用)详解

数学中的函数可以根据输入的数值求得一个确定的值,与此类似,C++ 中的函数也可以根据输入的数据,返回一个结果值。不同的是,C++中的函数涵盖的意义更加广泛,定义也更加灵活,不仅可以求数值,还可以执行一组相关的操作。

函数的构成

函数由 4 部分构成:返回值类型、函数名、参数列表和函数体,语法格式如下:
返回值类型 函数名(参数1, 参数2, ...)
{
    函数体;
}

1) 函数名

函数名就是函数的名字,即函数的标识符。

既然是标识符,就必须遵循标识符的命名规则。同变量的标识符相同,函数的标识符也只能由字母、数字以及下画线组成,并且不能以数字开头。

2) 返回值类型

函数的返回类型指的是函数会返回数据的类型。例如,一个函数返回一个 int 型数据,则该函数的返回类型就是 int。

如果某个函数不返回任何值,则其返回类型是 void,定义这样的函数的目的不是求一个值,而只是为了执行一组操作。

3) 参数列表

如果将函数返回的数据看做是它的输出数据,那么参数列表就是输入到函数内部的数据。

函数从其使用形式来看,就是接受输入进来的数据,最终输出一个结果值。

函数的参数位于一个括号中,并且用逗号分隔,括号中的部分就称做函数的参数列表。

4) 函数体

函数体是函数要执行的代码块,这些代码用来实现函数的功能或目的。

如果函数要返回一个数据,则函数体中至少需要一个 return 语句。其语法如下:
return 数据;
如果函数不需要返回数据,即函数的返回类型是 void,则在函数体中不需要 return 语句。

例如,下面就是一个写好的函数:
int addNum(int a, int b)
{
    int c = a + b;
    return c;
}
addNum() 函数有两个参数 a 和 b,表示它接收两个 2 个整数,函数体中会计算这两个整数的和,并将计算结果返回。

函数的调用

所谓调用函数,就是使用函数的功能返回一个值或者执行一组语句。

调用函数时,在函数名后跟一个括号,其中是向函数输入的数据,用逗号分隔,其语法如下:
函数名(数据1, 数据2, ...);
如果函数的返回值类型不是 void,那么调用函数的同时可以用一个变量接收它返回的值,语法格式如下:
变量 = 函数名(数据1, 数据2, ...);
以前面写好的 addNum() 函数,调用它计算 3 和 5 的和:
int sum = addNum(3, 5);
最终 sum 的值就是 8。

函数的声明和定义

C++ 标准规定,函数在调用之前,必须先声明。函数的声明就是为了告诉编译器存在这样一个函数,并且可以在后面的程序中使用。

我们知道,函数由返回值类型、函数名、参数列表和函数体这 4 部分组成。定义函数时,这 4 部分都必须有,而函数声明不同,它不包含函数体。

仍以 addNum() 函数为例,该函数的声明是:
int addNum(int a, int b);
int addNum(int , int );
声明函数时,参数的名称可以省略不写。

而函数的定义是:
int addNum(int a, int b)
{
    int c = a + b;
    return c;
}
函数的声明也称做函数原型,而函数的定义也称做函数实现。

在 C++ 程序中,函数的定义必须写,而函数的声明有时必须写,有时可以省略不写。

如果在调用前函数已经定义,则不必再写函数的声明了。例如:
#include <iostream>
//函数的定义
int addNum(int a, int b)
{
    int c = a + b;
    return c;
}
int main()
{
    int sum = addNum(3, 5); // 调用 addNum() 函数
    std::cout << sum << std::endl;
    return 0; 
}
输出结果为:

8

观察程序,调用 addNum() 函数是在第 10 行代码,在此之前已经有了 addNum() 函数的定义,编译器执行到第 10 行代码时,已经知晓了 addNum() 函数的所有细节,因此不再需要额外声明。

修改上面的程序,将 addNum() 函数放在 main() 函数后面,那么在 main() 函数中调用 addNum() 函数之前必须声明函数。
#include <iostream>
//函数的声明
int addNum(int a, int b);
int main()
{
    int sum = addNum(3, 5); // 调用 addNum() 函数
    std::cout << sum << std::endl;
    return 0; 
}

//函数的定义
int addNum(int a, int b)
{
    int c = a + b;
    return c;
}

return语句

函数中的 return 语句除了返回数据之外,还有一个重要的功能,就是结束函数的运行,在 return 语句之后的语句都不会执行。

例如:
int addNum(int a, int b)
{
    int c = a + b;
    return c;
    std::cout << “不会执行” << std::endl;
}
第 5 行的输出语句永远不会执行,因为函数在第 4 行已经执行结束了。

推荐阅读