函数

内容简介

函数把一段可复用逻辑封装起来,是 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++ 进阶再学。

学习路径