# C 编程中的函数

> 原文： [https://beginnersbook.com/2014/01/c-functions-examples/](https://beginnersbook.com/2014/01/c-functions-examples/)

函数是执行特定任务的语句块。假设您正在使用 C 语言构建应用，并且在某个程序中，您需要多次执行相同的任务。在这种情况下，您有两种选择：

a）每次要执行任务时都使用相同的语句集
b）创建一个执行该任务的函数，并在每次需要执行该任务时调用它。

使用选项（b）是一种很好的做法，优秀的程序员总是在用 C 编写代码时使用函数。

### 函数类型

1）**预定义的标准库函数** - 如`puts()`，`gets()`，`printf()`，`scanf()`等 - 这些函数已经在头文件中有定义（`.h`文件如`stdio.h`），所以我们只要在需要使用它们时调用它们。

2）**用户定义函数** - 我们在程序中创建的函数称为用户定义函数。

在本指南中，我们将学习如何创建用户定义的函数以及如何在 C 编程中使用它们。

## 为什么我们需要 C 中的函数

由于以下原因使用函数：

a）提高代码的可读性。

b）提高代码的可重用性，可以在任何程序中使用相同的函数，而不是从头开始编写相同的代码。

c）如果使用函数，代码的调试会更容易，因为错误很容易被跟踪。

d）减少代码的大小，重复的语句集被函数调用替换。

### 函数的语法

```c
return_type function_name (argument list)
{
    Set of statements – Block of code
}
```

**`return_type`**：返回类型可以是任何数据类型，如`int`，`double`，`char`，`void`，`short`等。一旦你完成下面的例子，不要担心你会更好地理解这些术语。

**`function_name`**：它可以是任何东西，但建议为函数设置一个有意义的名称，这样只要看到它的名字就可以很容易地理解函数的用途。

**参数列表**：参数列表包含变量名称及其数据类型。这些参数是函数的一种输入。例如 - 用于相加两个整数变量的函数将具有两个整数参数。

**代码块**：C 语句集，只要对函数进行调用，就会执行。

**您觉得上述术语令人困惑吗？ - 不要担心，在你学会了所有这些之前我不会结束本指南 :)**

让我们举一个例子 - 假设你想创建一个函数来相加两个整数变量。

**让我们分解问题，以便它易于理解：**

函数将添加两个数字，因此它应该有一些有意义的名称，如`sum`，`addition`等。例如，让我们为这个函数取名。

```c
return_type addition(argument list)
```

这个函数相加了两个整数变量，这意味着我需要两个整数变量作为输入，让我们在函数签名中提供两个整数参数。函数签名是：

```c
return_type addition(int num1, int num2)
```

两个整数之和的结果仅为整数。因此函数应该返回一个整数值 - **我得到了我的返回类型** - 它将是整数：

```c
int addition(int num1, int num2);
```

所以你得到了你的函数原型或签名。现在你可以在 C 程序中实现这样的逻辑：

### 如何在 C 中调用函数？

考虑以下 C 程序：

#### 示例 1：创建用户定义的函数`addition()`

```c
#include <stdio.h>
int addition(int num1, int num2)
{
     int sum;
     /* Arguments are used here*/
     sum = num1+num2;

     /* Function return type is integer so we are returning
      * an integer value, the sum of the passed numbers.
      */
     return sum;
}

int main()
{
     int var1, var2;
     printf("Enter number 1: ");
     scanf("%d",&var1);
     printf("Enter number 2: ");
     scanf("%d",&var2);

     /* Calling the function here, the function return type
      * is integer so we need an integer variable to hold the
      * returned value of this function.
      */
     int res = addition(var1, var2);
     printf ("输出： %d", res);

     return 0;
}

```

输出：

```c
Enter number 1: 100
Enter number 2: 120
输出： 220
```

#### 示例 2：创建一个不返回任何内容的`void`用户定义函数

```c
#include <stdio.h>
/* function return type is void and it doesn't have parameters*/
void introduction()
{
    printf("Hi\n");
    printf("My name is Chaitanya\n");
    printf("How are you?");
    /* There is no return statement inside this function, since its
     * return type is void
     */
}

int main()
{
     /*calling function*/
     introduction();
     return 0;
}

```

输出：

```c
Hi
My name is Chaitanya
How are you?
```

**有关 C 中函数的注意事项：**

1）C 程序中的`main()`也是一个函数。

2）每个 C 程序必须至少有一个函数，即`main()`。

3）函数数量没有限制; C 程序可以具有任意数量的函数。

4）一个函数可以调用自身，它被称为“**递归**”。我已经为它写了一份单独的指南。

**C 函数必须记住的术语**

**返回类型**：返回值的数据类型。它也可以是`void`的，在这种情况下，函数不返回任何值。

注意：例如，如果函数返回类型是 **`char`**，那么函数应该返回`char`类型的值，并且在调用此函数时`main()`函数应该有一个`char`数据类型的变量来存储返回的值。

结构看起来像：

```c
char abc(char ch1, char ch2)
{
   char ch3;
   …
   …
   return ch3;
}

int main()
{
   …
   char c1 = abc('a', 'x');
   …
}
```

#### 关于 C 中函数的更多主题

1） [**函数 - 按值调用方法**](https://beginnersbook.com/2014/01/c-function-call-by-value-example/) - 在按值调用方法中，实际参数被复制到形式参数，因此函数对形式参数执行的任何操作都不会影响实际参数。

2） [**函数 - 按引用调用方法**](https://beginnersbook.com/2014/01/c-function-call-by-reference-example/) - 与按值调用不同，在此方法中，实际参数的地址被传递给形式参数，这意味着对形式参数执行的任何操作会影响实际参数的值。