被这个问题困扰了很久,特写此篇进行记录

当我们写代码越来越熟练的时候,代码量会大幅增加,代码会逐渐变得繁琐。为了使程序更容易阅读,我们使用函数来封装一个个功能,使代码逻辑更清晰,可读性更高;
但是随着代码量的逐渐增加,同一个文件中代码量过大,仍然导致了代码的繁琐。又或者,一份代码只能用一次,利用率低。为了解决这个问题,跨文件定义,实现,调用函数就愈发重要了。

要在vscode中使用头文件跨文件定义,实现,调用函数,一般会有三个文件,它们分别为:
1. 主文件
2. 自定义头文件
3. 头文件的实现文件

一,主文件

首先,你需要建立一个主文件,后缀为 .c ,一般来说会是这样的:

#include <stdio.h>
#include <stdlib.h>
#include “name.h”  //name即为你要引入的其他头文件

int main()
{
    /*
    你的代码
    */
    return 0;
}

这是真正运行的文件,与一般只用一个文件的情况格式基本一致,唯一要注意的是,要额外引入自己定义的头文件,用双引号括起来,这里我用的是name.h。

二,自定义头文件

然后,你需要建立一个自定义的头文件,后缀为 .h ,一般来说具有以下格式:

#ifndef NAME_H_INCLUDED  //如果没有定义过NAME_H_INCLUDED(这里可以改,但是……还是规范点好)
#define NAME_H_INCLUDED  //就定义NAME_H_INCLUDED。

void good();  //定义成功函数(这里放你想放的函数的声明)

void bad();   //定义失败函数


//……

#endif  //结束

在本文件内,只能放函数声明,宏定义,结构体定义等,不能放函数实现。

三,头文件的实现文件

最后,你需要建立一个文件用于实现自定义头文件中的函数,后缀为 .c ,一般具有以下格式:

#include <stdio.h>
#include <stdlib.h>
#include "name.h"   //再次引入头文件

void good()
{
    printf("成功啦!\n");
}

void bad()
{
    printf("失败啦!\n");
}

这里唯一要注意的是要将该文件与自定义头文件置于同一个文件夹中。


最后一步(就是这点困扰了我很久),要将自定义头文件和实现文件关联在一起,但vscode是不会自动帮你关联的,这时就需要你手动进行关联,解决方法如下:

在当前路径下的.vscode文件夹中找到tasks.json,找到”args”属性,在其中”-g”后,”-o”前加入”${fileDirname}\name.c”,每组字符串以逗号分隔。name.c即项目中要参与编译的文件名,即实现文件。
就像这样:

{
    "tasks": [
        {
            "type": "shell",
            "label": "gcc.exe build active file",
            "command": "C:\\mingw64\\bin\\gcc.exe",
            "args": [
                "-g",
                "${file}",
                "${fileDirname}\\IstkFile.c",                //在这里!
                "${fileDirname}\\PrintQuestion.c",
                "${fileDirname}\\MarkingSystemLib.c",
                "${fileDirname}\\zqyLib.c",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"

            ],
            "options": {
                "cwd": "C:\\mingw64\\bin"
            }
        }
    ],
    "version": "2.0.0"
}

注意事项:
1.自定义头文件名最好与实现文件一致,保持规范嘛。
2,主文件,实现文件的引用要注意与自定义头文件名一致。

参考资料:http://www.bubuko.com/infodetail-3337661.html

最后修改日期: 2020年2月10日

作者

0 0 投票数
文章评分
订阅评论
提醒
1 评论
内联反馈
查看所有评论
方笛
管理员
2 年 前

这是一个很不错的多文件编译解决方案。但是这种通过修改Visual Studio Code的task.json文件的方法在文件更改频繁的情况下还是比较麻烦的。对于更改频繁的工程,个人认为写个Makefile之类的编译脚本,再在task.json里面调用make工具,可以大幅减少重复编译和修改配置文件的时间,体验也会好很多。