vscode无法读取头文件问题,改变exe生成路径问题,头文件,源文件分离问题

首先声明一点,我这里演示的基础是源文件都位于项目根目录下的,然后exe文件和头文件可以放在项目的其他任何文件夹中的。

 

目录

1. vscode自定义头文件包含问题

1.1 首先是我们的c_cpp_peoperties.json文件

 1.2 接下来是我们的settings.json文件

2.改变exe生成路径问题

2.1 首先是我们的tasks.json文件

 2.2 其次是我们的settings.json文件

3. 头文件,源文件分离问题


 

1. vscode自定义头文件包含问题

vscode如何包含自己写的头文件呢,这里我们主要修改两个json文件

1.1 首先是我们的c_cpp_peoperties.json文件

为了方便,我创建了一个文件夹include,专门用于存放我的项目头文件,这个完全看你喜好了,你想放哪都行。我们找到这个json文件中的includePath数组,把你的头文件路径添加进去就行了。(补充一下.\\是当前项目的路径,也就是.vscode文件夹的上一级c_files,加个*说明把全部的头文件都加进去了),这里我用相对路径也是为了不想出现中文,当然你想用绝对路径也是可以的。

45d715bcee164bfbb49ec77415321bf3.png

 1.2 接下来是我们的settings.json文件

 打开文件在这个code-runner.executorMap下面进行修改,以c语言为例,在这个gcc的后面加上你的头文件路径,注意路径前面要加-I(大写的i),其次注意路径前后的\"。(不知道这个JSON文件哪来的,可以参考这个https://blog.csdn.net/weixin_63676550/article/details/128194156 的第三个问题 )bd67192a6c2d4195b5b7dc8ed369e735.png

 至此我们的头文件问题就解决了,如果还有问题,肯定是其他地方还没配置好,比如exe路径之类的。下面也会介绍这些json文件是怎么生成exe文件路径的。

2.改变exe生成路径问题

对于exe文件的生成,我们知道无论是c还是c++,编译链接完之后都会生成一个exe文件,如果不改路径的话,它就默认跟我们的源程序cpp文件放到一个目录下了,如果你有强迫症,那么下面我们就来改变一下这个exe文件的生成路径,这里也是只需要改变两个json文件即可。

2.1 首先是我们的tasks.json文件

可以看到,我这里是创建了一个exe文件夹,然后打开tasks.json文件,找到args数组,把里面那个-o后面的路径(你应该能认出来吧(●'◡'●))也是改成你自己想要的exe文件夹路径。(这里补充一下,${fileDirname}就是我们的项目文件夹路径,${fileBasenameNoExtension}就是我们的执行文件,但它不带文件扩展名,所以要手动加一个exe)

2ca8f0d035074a58ad1840a2b2318183.png

 2.2 其次是我们的settings.json文件

依然是在code-runner.executorMap下面进行修改,在这个c这修改,当然如果你是c++那你就选cpp那行。

baa68d8db35a45f09a11afc44d23d717.png

 在我们刚刚包含头文件路径的后面的这个-o后面加上我们的exe文件路径,路径跟刚刚tasks.json文件中的是一样的(一点小区别了,我这里最后用的是fileNameWithoutExt,刚刚tasks.json文件中用的是fileBasenameNoextension),注意&&前后两段是一样的路径。json文件不是最后一行,最后要记得加逗号。

1b2ee75d0a3d46a0a3e985ea49b459e5.png

 为了大家方便,这里也给出了我自己的一个settings.json文件(C语言的)。其实这方面设置,c语言和c++的区别就在于后缀名和gcc、g++了,比着画就行了。

{
    "workbench.colorTheme": "Visual Studio Dark",//设置背景皮肤的
    "terminal.integrated.defaultProfile.windows": "Command Prompt",
    "code-runner.runInTerminal": true,
    "files.encoding": "gbk",
    "grunt.autoDetect": "on",
    "code-runner.preserveFocus": true,//设置让光标在代码运行后集中到终端的
    "settingsSync.ignoredExtensions": [
    ],
    "code-runner.executorMap": {
        "c": "cd $dir && gcc -I \"D:\\IDE_code_practice\\vs_code\\C_files\\include\" $fileName -o .\\exe\\$fileNameWithoutExt.exe && .\\exe\\$fileNameWithoutExt.exe",
    "code-runner.clearPreviousOutput": true,
    "files.autoSave": "afterDelay", //设置自动保存代码的
    "code-runner.executorMapByFileExtension": {
    

        ".vb": "cd $dir && vbc /nologo $fileName && $dir$fileNameWithoutExt",
        ".vbs": "cscript //Nologo",
        ".scala": "scala",
        ".jl": "julia",
        ".cr": "crystal",
        ".ml": "ocaml",
        ".exs": "elixir",
        ".hx": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt",
        ".rkt": "racket",
        ".scm": "csi -script",
        ".ahk": "autohotkey",
        ".au3": "autoit3",
        ".kt": "cd $dir && kotlinc $fileName -include-runtime -d $fileNameWithoutExt.jar && java -jar $fileNameWithoutExt.jar",
        ".kts": "kotlinc -script",
        ".dart": "dart",
        ".pas": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt",
        ".pp": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt",
        ".d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt",
        ".hs": "runhaskell",
        ".nim": "nim compile --verbosity:0 --hints:off --run",
        ".csproj": "dotnet run --project",
        ".fsproj": "dotnet run --project",
        ".lisp": "sbcl --script",
        ".kit": "kitc --run",
        ".v": "v run",
        ".vsh": "v run",
        ".sass": "sass --style expanded",
        ".cu": "cd $dir && nvcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
        ".ring": "ring",
        ".sml": "cd $dir && sml $fileName"
    },
    "C_Cpp.default.cppStandard": "c++11",
    "C_Cpp.default.cStandard": "c11",
    "code-runner.ignoreSelection": true
    }
}

3. 头文件,源文件分离问题

最后给大家看一下我的项目文件目录

7d22719bdf4b45a7b7890613dd04b26f.png

至此,结束~ 

 

 

 

 

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言中的头文件互相包含问题,是指多个头文件之间相互引用、相互包含而导致的编译错误。当两个头文件相互引用时,会造成无限循环的包含,使得编译器无法正常解析和处理。 这个问题通常由于程序的模块化设计不合理所导致。在C语言中,头文件的作用是引入函数、变量的声明和定义,以供其他源文件使用。如果两个或多个头文件之间相互引用,意味着它们之间存在依赖关系,即一个头文件中引用了另一个头文件中的函数或变量。 当头文件A引用了头文件B,而头文件B又引用了头文件A时,编译器会陷入无限循环,因为当编译器处理头文件A时,会读取并解析头文件B,而在处理头文件B时,又会读取并解析头文件A,如此循环下去,直到编译器出现错误。 为了解决头文件互相包含的问题,可以采取以下方法: 1. 使用预编译指令#ifndef、#define和#endif来避免重复包含。在头文件的开头和结尾使用这些指令,可以防止头文件被重复引用。 2. 使用前向声明来替代包含头文件。如果只需要引用函数或变量的声明而不需要其具体定义,可以使用前向声明来替代包含头文件的方式,以减少头文件之间的相互依赖。 3. 重新设计程序结构,减少头文件之间的相互引用。通过合理的程序设计,可以降低模块之间的耦合性,减少或避免头文件互相包含的问题。 综上所述,头文件互相包含问题C语言中常见的编译错误,通过采取预编译指令、前向声明和重新设计程序结构等方法,可以有效地解决这个问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耶耶LCY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值