return 是C语言中一个至关重要的关键字,它的核心作用是终止当前函数的执行,并将控制权返回给调用该函数的地方,它还可以选择性地向调用者返回一个值。

我们可以将 return 的作用分解为以下几个主要方面:
从函数返回一个值 (主要作用)
这是 return 最常见和最广为人知的作用,当一个函数被声明为返回某个类型的值(即非 void 类型)时,它必须使用 return 语句将这个值“带”回来。
语法:
return expression;
这里的 expression 可以是任何常量、变量或复杂的表达式,其计算结果类型必须与函数声明的返回类型兼容。
示例:
#include <stdio.h>
// 这个函数被声明为返回一个 int 类型的值
int add(int a, int b) {
int sum = a + b;
// 计算结果,并通过 return 返回
return sum;
}
int main() {
int result = add(5, 3); // 调用 add 函数,并将返回的值赋给 result
printf("5 + 3 = %d\n", result); // 输出: 5 + 3 = 8
return 0; // main 函数返回 0 给操作系统,表示程序正常结束
}
关键点:

- 必须有返回值:如果一个函数的返回类型不是
void,那么函数内部的所有执行路径都必须包含一个有效的return语句,否则,函数的行为是未定义的,可能会导致编译器警告。 - 类型匹配:返回值的类型最好与函数声明中的返回类型一致,或者能够被隐式转换。
从函数中提前退出 (流程控制)
return 的第二个重要作用是作为流程控制语句,用于在函数的某个条件满足时,立即终止函数的执行,而无需执行到函数的末尾,这通常用于处理错误、边界条件或特殊情况。
示例:查找数组中的元素
#include <stdio.h>
// 在数组中查找一个值,如果找到返回其索引,否则返回 -1
int findValue(int arr[], int size, int target) {
for (int i = 0; i < size; i++) {
if (arr[i] == target) {
// 找到目标后,立即返回索引,并退出函数
return i;
}
}
// 循环结束后都没有找到,返回 -1 表示未找到
return -1;
}
int main() {
int numbers[] = {10, 20, 30, 40, 50};
int size = sizeof(numbers) / sizeof(numbers[0]);
int value_to_find = 30;
int index = findValue(numbers, size, value_to_find);
if (index != -1) {
printf("找到了 %d,它在数组中的索引是 %d\n", value_to_find, index);
} else {
printf("没有找到 %d\n", value_to_find);
}
return 0;
}
在这个例子中,一旦在 for 循环中找到了目标值,return i; 就会立即执行,函数终止,后面的循环代码和 return -1; 都不会被执行。
从 void 函数返回
当一个函数被声明为 void 类型时,它意味着这个函数不向调用者返回任何值,尽管如此,我们仍然可以在 void 函数内部使用 return 语句,但它的作用仅仅是提前退出函数,不能跟任何返回值。
语法:
return;
示例:参数有效性检查
#include <stdio.h>
// 一个 void 函数,用于打印消息,但只在参数有效时执行
void printMessage(const char* message, int length) {
// 提前进行参数检查,如果无效则直接退出
if (message == NULL || length <= 0) {
printf("无效的参数!\n");
return; // 提前退出函数,不执行下面的打印逻辑
}
// 只有参数有效时,这里的代码才会被执行
for (int i = 0; i < length; i++) {
putchar(message[i]);
}
putchar('\n');
}
int main() {
printMessage("Hello, C!", 8); // 正常执行
printMessage(NULL, 10); // 会触发提前返回
return 0;
}
在 printMessage 函数中,return; 用于在检测到错误时优雅地退出,避免了对无效指针或负数长度进行操作,从而防止了程序崩溃。
从 main 函数返回
main 函数是程序的入口点,当 main 函数执行到 return 语句时,整个程序就会终止。main 函数的返回值会传递给操作系统,通常被称为“程序退出状态码”。
return 0;:通常表示程序成功执行完毕,这是最常见的情况。return 非0值;:通常表示程序在执行过程中遇到了错误或异常,不同的非零值可以用来区分不同类型的错误。return 1;或return -1;。
示例:
#include <stdio.h>
int main() {
int a = 10;
int b = 0;
// 检查除数是否为0
if (b == 0) {
printf("错误:除数不能为零!\n");
// 返回非零值表示程序异常终止
return 1;
}
int result = a / b;
printf("结果是 %d\n", result);
// 程序正常结束
return 0;
}
在这个例子中,b 为0,程序会打印错误信息并以状态码 1 退出,向操作系统表明这是一个错误情况。
总结与最佳实践
return 的作用 |
适用场景 | 示例 |
|---|---|---|
| 返回值 | 函数被声明为非 void 类型,需要计算并返回一个结果。 |
int max(int a, int b) { return (a > b) ? a : b; } |
| 提前退出 | 在函数中途遇到特殊情况(如错误、找到目标、参数无效等)需要立即终止函数。 | if (error) { return; } (用于 void 函数) 或 if (found) { return index; } |
| 程序退出 | 在 main 函数中使用,向操作系统返回程序的执行状态。 |
return 0; (成功) 或 return 1; (失败) |
最佳实践:
- 保持一致性:如果一个函数有多个
return语句,确保它们返回的值类型是兼容的。 - 避免过多
return:在一个函数中有太多的return语句可能会使代码逻辑变得难以跟踪,虽然现代编译器能很好地优化,但对于复杂的逻辑,可以考虑使用goto或重构代码来减少return的数量(但这通常不是必须的)。 - 清晰的意图:使用
return来清晰地表达你的代码意图,是返回计算结果,还是提前退出?让代码的读者一目了然。
return 是C语言函数机制的核心,它不仅是数据传递的通道,更是程序流程控制的重要工具,理解并熟练掌握 return 的各种用法,是编写健壮、清晰的C代码的关键一步。
