函数
内容简介
函数把一段可复用逻辑封装起来,是 C/C++ 程序的基本组织单位,也是后续学习类成员函数、回调和泛型算法的基础。
用法
基本结构
返回类型 函数名(参数列表)
{
函数体
return 返回值;
}#include <iostream>
int add(int a, int b)
{
return a + b;
}
int main()
{
int result = add(2, 3);
std::cout << result << std::endl;
return 0;
}无返回值函数
void print_line()
{
std::cout << "---------------" << std::endl;
}递归函数
int factorial(int n)
{
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}命令行参数
int main(int argc, char *argv[])
{
for (int i = 0; i < argc; i++) {
std::cout << argv[i] << std::endl;
}
return 0;
}最佳代码实践
- 函数只做一件清晰的事,名字体现行为。
- 参数尽量少;如果参数很多,考虑结构体或对象。
- C 中不接收参数时写
void,例如int main(void)。 - 函数使用前要有声明,通常放在头文件中。
- C++ 中大对象参数优先用
const 引用,避免不必要拷贝。
void print_name(const std::string& name)
{
std::cout << name << std::endl;
}错误用法
int get_value()
{
int value = 10;
// 错误:声明返回 int,却没有 return
}int* bad(void)
{
int value = 10;
return &value; // 错误:返回局部变量地址
}注意事项
- C/C++ 函数一般只能直接返回一个值;需要返回多个结果时可使用结构体、指针参数或 C++ 的
std::tuple。 - 递归必须有终止条件,否则会无限递归直到栈溢出;栈溢出风险见 C语言系统栈与过程调用 和 未定义行为。
- 回调函数本质是把函数地址作为参数传递,理解它需要先掌握 CandCpp指针 和函数指针。
- 基础阶段先写普通函数即可;默认参数、函数重载、内联函数等内容放到 C++ 进阶再学。