Menu
CoddyTech

源文件

本课属于 Coddy C 学习旅程的“面向对象编程”单元。第 3 课,共 61 课。

到目前为止,我们一直把函数声明放在头文件中,但实际的函数代码(定义)都放在主文件里。模块化编程的下一步是把这些定义移到各自的源文件(.c 文件)中。

这样就形成了清晰的三部分结构:头文件声明函数,单独的源文件定义函数,而 main 只负责使用它们。具体如下:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif
// math_utils.c
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

int main() {
    printf("%d\n", add(5, 3));
    return 0;
}

注意,math_utils.c 包含了自己的头文件。这样可以确保函数定义与声明一致,如果两者不一致,编译器就会捕获错误。主文件只需包含头文件即可使用该函数,无需了解 add 的内部工作原理。

这种分离可以隐藏实现细节,让你修改函数逻辑时,无需改动使用这些函数的文件。

challenge icon

挑战

简单

让我们通过将代码整理成规范的三文件结构,来构建一个简单的数学工具:一个用于声明的头文件、一个用于实现的源文件,以及一个使用它们的主文件。

你将创建三个文件:

  • math_ops.h:包含两个操作函数声明的头文件:multiply 和 subtract。这两个函数都接收两个整数,并返回一个整数。别忘了使用符号 MATH_OPS_H 添加包含保护。
  • math_ops.c:包含 multiply 和 subtract 实际实现的源文件。此文件应包含它自己的头文件,以确保声明与定义一致。
  • main.c:包含头文件并使用这两个函数进行计算的主文件。

multiply 函数应返回两个整数的乘积,subtract 函数应返回第一个整数减去第二个整数的结果。

你将收到两个整数输入:a 和 b。

在主函数中,将两个操作的结果分别打印在单独的行上:

Product: {result of multiply}
Difference: {result of subtract}

例如,输入 8 和 3 时,输出为:

Product: 24
Difference: 5

亲手试试

#include <stdio.h>
#include "math_ops.h"

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    
    // TODO: 用 a 和 b 调用 multiply 函数,并保存结果
    
    // TODO: 用 a 和 b 调用 subtract 函数,并保存结果
    
    // TODO: 按以下格式打印结果:
    // Product: {multiply 的结果}
    // Difference: {subtract 的结果}
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: C 在线编译器