使用多个函数时,最简单的方法是将所有函数放在同一文件中,就像编译单个函数的文件一样对该文件进行编译

具体的编译过程根据操作系统不同而具有差异性

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);

运行结果:

2a36a5a4e00f49cebf03379aab0136b0.png


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”


 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐