INTERACTIVE LAB

cppVIP0 次浏览 更新于 2026-09-29

C 语言多文件项目

了解 C 语言多文件项目的组织、编译与链接方法。

前言

一个软件项目往往包含多个源码文件,编译时需要将这些文件一起编译,生成一个可执行文件。

假定一个项目有两个源码文件foo.c和bar.c,其中foo.c是主文件,bar.c是库文件。

所谓“主文件”,就是包含了main()函数的项目入口文件,里面会引用库文件定义的各种函数:

// File foo.c
#include <stdio.h>

int main(void) {
  printf("%d\n", add(2, 3));  // 5!
}

上面代码中,主文件foo.c调用了函数add(),这个函数是在库文件bar.c里面定义的:

// File bar.c

int add(int x, int y) {
  return x + y;
}

现在,将这两个文件一起编译:

gcc -o foo foo.c bar.c

# 更省事的写法
gcc -o foo *.c

上面命令中,gcc 的-o参数指定生成的二进制可执行文件的文件名,本例是foo。

这个命令运行后,编译器会发出警告,原因是在编译foo.c的过程中,编译器发现一个不认识的函数add(),foo.c里面没有这个函数的原型或者定义。

因此,最好修改一下foo.c,在文件头部加入add()的原型:

// File foo.c
#include <stdio.h>

int add(int, int);

int main(void) {
  printf("%d\n", add(2, 3));  // 5!
}

现在再编译就没有警告了。

你可能马上就会想到,如果有多个文件都使用这个函数add(),那么每个文件都需要加入函数原型。

一旦需要修改函数add()(比如改变参数的数量),就会非常麻烦,需要每个文件逐一改动。

所以,通常的做法是新建一个专门的头文件bar.h,放置所有在bar.c里面定义的函数的原型:

// File bar.h

int add(int, int);

然后使用include命令,在用到这个函数的源码文件里面加载这个头文件bar.h:

// File foo.c

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

int main(void) {
  printf("%d\n", add(2, 3));  // 5!
}
该实验为 VIP 专享内容,
请开通后继续阅读后续 70% 并运行完整示例~

DISCUSSION

评论 0

还没有评论,来留下第一条吧。