在 C 语言中,并没有一个叫做 routine 的关键字。routine 是一个通用术语,意思是“例行程序”、“流程”或“一套固定的步骤”,在编程语境下,它通常指的就是 函数。

(图片来源网络,侵删)
当我们在 C 语言中谈论 routine 时,我们实际上是在谈论 如何定义和使用函数,函数是 C 语言的核心构建块,它允许我们将代码组织成独立、可重用的单元。
下面我将从以下几个方面,用一个完整的例子来解释 C 语言中的 routine (函数):
- 为什么需要函数?
- 函数的定义
- 函数的声明
- 函数的调用
- 参数传递
- 返回值
- 完整的代码示例
为什么需要函数?
想象一下,如果你写一个很长的程序,所有代码都 main 函数里,那将会非常混乱、难以阅读和维护,函数的主要作用就是:
- 代码重用:你可以写一个函数,然后在程序的任何地方多次调用它,而不需要重复编写相同的代码。
- 模块化:将一个复杂的大问题分解成多个小而简单的小问题,每个小问题对应一个函数,这使得代码结构清晰,易于理解和调试。
- 可维护性:如果某个功能需要修改,你只需要修改对应的函数,而不需要改动整个程序。
函数的定义
一个函数的定义告诉编译器这个函数是做什么的,它由哪些部分组成。

(图片来源网络,侵删)
返回类型 函数名(参数列表) {
// 函数体
// 在这里执行具体的操作
return 返回值; // 如果返回类型不是 void
}
- 返回类型:函数执行完毕后返回给调用者的数据的类型。
int,float,char,如果函数不返回任何值,则使用void。 - 函数名:给函数起的名字,遵循 C 语言的标识符命名规则(通常用小写字母,单词间用下划线分隔,如
calculate_sum)。 - 参数列表:传递给函数的变量的列表,用于接收外部传入的数据,如果没有参数,则使用
void或直接留空(在 C99 标准后, 和(void)是等效的)。 - 函数体:由 包围起来的代码块,是函数实际执行的地方。
- return 语句:用于从函数中退出,并可选地将一个值返回给调用者。
函数的声明
函数声明(也称为函数原型)告诉编译器一个函数的存在,包括它的名字、返回类型和参数类型,这通常放在文件的开头(在 main 函数之前)。
格式:
返回类型 函数名(参数列表);
注意:声明时参数名可以省略,但参数类型不能省略。
// 声明 int add(int, int); // 正确 int add(int a, int b); // 也正确,可读性更好
函数的调用
函数调用就是执行函数中代码的过程,你只需要在需要的地方写下函数名,并提供相应的参数(实参)即可。

(图片来源网络,侵删)
格式:
函数名(实际参数列表);
注意:调用时传递的值(实参)需要与函数定义/声明中的参数(形参)在类型和数量上匹配。
参数传递
C 语言中,函数参数传递有两种主要方式:
- 值传递:这是 C 语言默认的方式,调用函数时,会将实参的值复制一份给形参,在函数内部,你操作的是这个副本,不会影响原始实参的值。
- 指针传递:通过传递变量的地址,让函数可以直接访问和修改原始实参的内存内容,这常用于需要修改外部变量或传递大型数据结构(如数组)以避免性能开销。
返回值
return 语句用于将一个值从函数内部传递到函数外部,调用者可以接收这个返回值,或者忽略它(如果返回类型是 void)。
完整的代码示例
下面是一个完整的 C 程序,它定义了几个不同类型的“routine”(函数),并演示了如何调用它们。
#include <stdio.h>
// ======================
// 1. 函数声明
// ======================
// 这是一个有返回值和参数的函数的声明
int add(int a, int b);
// 这是一个没有返回值但有参数的函数的声明
void print_message(const char *message);
// 这是一个没有返回值也没有参数的函数的声明
void say_hello();
// ======================
// 2. main 函数 - 程序的入口
// ======================
int main() {
int num1 = 5;
int num2 = 10;
int sum;
printf("--- C Language Routine (Function) Demo ---\n\n");
// 调用 add 函数
sum = add(num1, num2); // 传递 num1 和 num2 作为实参
printf("The sum of %d and %d is: %d\n", num1, num2, sum);
// 调用 print_message 函数
print_message("This is a message from a routine.");
// 调用 say_hello 函数
say_hello();
return 0;
}
// ======================
// 3. 函数定义
// ======================
// 函数:add
// 描述:计算两个整数的和
// 返回类型:int
// 参数:两个 int 类型的参数 a 和 b
int add(int a, int b) {
// a 和 b 是形参,它们是 num1 和 num2 的副本
int result = a + b;
return result; // 返回计算结果
}
// 函数:print_message
// 描述:打印一条消息
// 返回类型:void (不返回任何值)
// 参数:一个 const char* 类型的指针
void print_message(const char *message) {
// message 是一个指针,它指向 main 函数中字符串的地址
// 由于是 const,它不能修改原始字符串
printf("Routine says: %s\n", message);
}
// 函数:say_hello
// 描述:打印一句问候语
// 返回类型:void
// 参数:无
void say_hello() {
printf("Hello from a routine with no arguments and no return value!\n");
}
如何编译和运行:
- 将上述代码保存为文件,
routines.c。 - 打开终端或命令提示符。
- 使用 GCC 编译器进行编译:
gcc routines.c -o routines
- 运行生成的可执行文件:
- 在 Windows 上:
routines.exe - 在 Linux 或 macOS 上:
./routines
- 在 Windows 上:
预期输出:
--- C Language Routine (Function) Demo ---
The sum of 5 and 10 is: 15
Routine says: This is a message from a routine.
Hello from a routine with no arguments and no return value!
在 C 语言中,routine 就是指 function (函数),通过定义、声明和调用函数,你可以构建出结构清晰、易于维护和重用的强大程序,掌握函数是学习 C 语言乃至任何编程语言的基石。
