使用多个函数时,最简单的方法是将所有函数放在同一文件中,就像编译单个函数的文件一样对该文件进行编译
具体的编译过程根据操作系统不同而具有差异性
Window系统下的编译器是面向工程的
工程(project):描述了一个特定的程序所使用的资源,其中包括源代码文件
使用这种面向工程的编译器运行单文件程序时,必须创建工程;对于多文件程序,需要使用相应的菜单命令将源代码文件加入到一个工程中;工程必须包含所有源代码文件(扩展名为.c的文件)
头文件(.h文件)不能包含在工程中,因为工程只管理所使用的源代码文件,具体使用那些头文件需要由源代码文件中的 #include 指令确定
一、头文件的使用
如果把main()函数放在一个文件中而把自定义函数放在另一个文件中,那么包含main()函数的文件仍然需要使用自定义函数的原型
如果把函数原型放在一个头文件中,就不必每次使用这些函数时输入其函数原型,只需要包含相应的头文件即可
把函数原型放在相应的头文件中,是C标准库的做法
编写程序的过程中经常需要使用C的预处理器定义常量,定义的常量只能用于包含相应#define语句的文件
直接在每个文件中键入该指令显然是现实的
比较好的解决方法是把所有的#define指令放在一个头文件中,然后在需要的文件中使用#include语句引用该头文件
二、多文件编译
把函数原型和常量定义放在一个头文件中是一个很好的编程习惯
示例代码:
main.c文件
#include <stdio.h>
#include "cal_module.h"
int main(void)
{
int a ;
int b ;
printf("please enter 2 integer numbers: \n");
while(scanf("%d %d", &a, &b) != 2);
printf("%d + %d is: %d \n", a, b, sum(a, b));
printf("%d - %d is: %d \n", a, b, sub(a, b));
printf("%d * %d is: %d \n", a, b, prod(a, b));
printf("%d / %d is: %d \n", a, b, quot(a, b));
printf("%d %% %d is: %d \n", a, b, remd(a, b));
return 0;
}
cal_module.c文件
#include <stdio.h>
#include "cal_module.h"
int sum(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int prod(int a, int b)
{
return a * b;
}
int quot(int a, int b)
{
if(b != 0) return a / b;
else return 0;
}
int remd(int a, int b)
{
if(b != 0) return a % b;
else return 0;
}
cal_module.h文件
int sum(int a, int b);
int sub(int a, int b);
int prod(int a, int b);
int quot(int a, int b);
int remd(int a, int b);
运行结果:
PS:VSCode的多文件编译:
1)在settings.json文件中增加代码:
"code-runner.executorMap":{
"c": "cd $dir && gcc *.c -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ -std=c++14 *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
},
2)main.c界面中右击,点击“Run Code”