# 函数声明与定义

URL: https://caijiao.org/cpp/function/definition
Source: docs/cpp/function/definition.md
Description: 本节将介绍 C++ 中函数的声明与定义，包括函数的作用、如何声明和定义函数，以及如何调用它们。这是 C++ 编程中的基础知识，帮助你组织和管理代码的逻辑。

在 C++ 中，函数是实现特定功能的代码块。通过将代码逻辑封装在函数内，我们可以提高代码的复用性、可读性和可维护性。函数的使用涉及两个主要部分：**函数声明**和**函数定义**。

## 函数声明

函数声明是告诉编译器函数的名称、返回类型和参数类型的过程，但它不包含函数的具体实现。函数声明通常放在文件的顶部，或者在头文件中，以便在程序的其他地方可以调用该函数。

### 函数声明的语法

```cpp
return_type function_name(parameter_list);
````

例如，声明一个返回 `int` 类型的函数，名为 `add`，它接受两个 `int` 类型的参数：

```cpp
int add(int, int);  // 声明一个 add 函数
```

## 函数定义

函数定义是对函数的实际实现，它包含函数的功能代码。在函数定义中，我们指定了函数返回的值，并对输入参数进行处理。

### 函数定义的语法

```cpp
return_type function_name(parameter_list) {
    // 函数体
}
```

例如，定义上述的 `add` 函数：

```cpp
int add(int a, int b) {
    return a + b;  // 返回 a 和 b 的和
}
```

## 函数声明与定义的关系

* **声明**：仅提供函数的名称、返回类型和参数类型，用于告诉编译器函数存在，方便在程序其他部分调用。
* **定义**：提供函数的具体实现，包含实际的功能代码。

声明与定义可以在同一文件中，也可以分开。在实际开发中，函数声明通常放在头文件中，而函数定义则放在源文件中。

### 示例：

```cpp
#include <iostream>
using namespace std;

// 函数声明
int add(int, int);

int main() {
    int result = add(3, 4);  // 调用 add 函数
    cout << "结果是: " << result << endl;
    return 0;
}

// 函数定义
int add(int a, int b) {
    return a + b;  // 返回两数之和
}
```

在这个例子中，`add` 函数首先在文件顶部声明，随后在 `main` 函数中被调用。最后，`add` 函数在文件的后面被定义，提供了函数的实际实现。

## 函数声明与定义的注意事项

* **声明与定义的匹配**：函数声明和定义的返回类型、函数名和参数类型必须完全一致。否则会导致编译错误。
* **函数重载**：C++ 支持函数重载，即同名的多个函数可以根据参数的数量或类型的不同而有不同的实现。函数重载是根据参数列表来区分不同的函数，而与返回类型无关。

## 小结

* 函数声明告诉编译器函数的存在，但不包含实现。
* 函数定义提供函数的实际功能实现。
* 函数声明和定义在代码中分开，有助于组织代码，提升代码的可维护性。
* 在函数声明和定义中，返回类型、函数名和参数类型必须匹配。

掌握函数声明与定义的基本概念，将帮助你更加高效地组织和编写 C++ 程序。
