VSCode#include头文件时找不到头文件:我的解决方法

0.前言 

1.在学习了Linux之后,我平常大部分都使用本地的XShell或者VSCode连接远程云服务器写代码,CentOS的包管理器为我省去了不少繁琐的事情,今天使用vscode打开本地目录想写点代码发现#include头文件后,下方出现了波浪线:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <fcntl.h>

前面介绍VSCode的解决方法,最后介绍VS2019的解决方法。 

2.我的解决方法VSCode:

依次点击并打开。

你将来到"settings.json",这是一个全局的默认配置文件。

如果你没有下面的内容,请按照格式添加:
 

{
  "C_Cpp.default.compilerPath":"E:\\mingw_bulids\\mingw64\bin",
  "C_Cpp.default.includePath": 
    ["E:\\mingw_bulids\\mingw64\\include",
    "D:\\Users\\polyspace\\verifier\\cxx\\include",
    "E:\\mingw_bulids\\mingw64\\x86_64-w64-mingw32\\include"]
}

逐个解释: 

C_Cpp.default.compilerPath:

  • 指定了 C/C++ 编译器的路径,我使用的是 编译器路径如上。

C_Cpp.default.includePath:

  • 指定了 C/C++ 编译器查找头文件的路径。

当然了,我的settings.json中还有其他配置项,配置编辑器的主题、字体、代码补全等。这都不重要了。


问题是你怎么知道你的编译器路径以及查找头文件的路径呢?

我是这样做的:直接在everything软件中搜索出现红色波浪线的头文件,比如unistd.h这个:
搜索结果如下:

我找到了当初安装它们的路径。

此时,右键该文件名称,“打开路径”。

然后你会发现,这些头文件安静地躺在这个路径下,请你将该路径复制,并添加在"C_Cpp.default.includePath":后面,值得注意的两个点:

第一:由于转义字符的存在,你需要在每个'\'后多写一个'\'。

第二:如果你的"C_Cpp.default.includePath"后面要写多个路径,请用 [ ]将它们包起来,每个之间用逗号分割,且每个路径用英文双引号引起来。

"C_Cpp.default.compilerPath"写面填什么与"C_Cpp.default.includePath"方法类似,不必多言。


现在,请你关闭这个全局的settings.json来到你的工作区下,打开如下文件:

你将看到如下文件,我先解释一下各项含义:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "${default}",
                "E:/mingw_bulids/mingw64/include/x86_64-linux-gnu"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "E:\\mingw_bulids\\mingw64\\bin\\g++.exe",
            "cStandard": "c17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}

各项含义:

  • "compilerPath": "E:\\mingw_bulids\\mingw64\\bin\\g++.exe",指定了编译器的路径。
  •  "cStandard": "c17",和 "cppStandard": "gnu++17"是C和C++的标准。

  •  "includePath": ["${workspaceFolder}/**",]表示搜索当前工作区下的所有文件夹,一般用来包含自己写的.h头文件。

  • "${default}":表示使用编译器默认的包含路径。他就是include全局settings.json里头文件的路径的。大部分读者可能都没有添加这个路径。

  • "E:/mingw_bulids/mingw64/include/x86_64-linux-gnu":这个是我要使用的一些Linux下头文件的路径。(读者们可能不需要这个,你们完全可以拷贝到全局settings.json文件中我们include的path下面去,这里只需要添加"${default}"就行了)。

总而言之,读者们可能需要改动或者添加的如下:

 具体根据自己情况即可。另外你们如果是初次配置,可能会找不到.vscode下的c_cpp_properties,请参考其他回答,这个我不再赘述。

行文至此,相信读者问题应该得到了解决。


3.上述方法在VS2019中的错误尝试: 

- 我发现在VS2019中无法使用<unistd.h>文件,故:

点击项目,再点击属性。

将上文我们在电脑中共找到的路径添加在“附加包含目录”中,并用英文分号结尾点击确定。

这是错误的解决方法,因为我在后续写代码发现cout和endl都出现了波浪线提示,原因是这样的:MinGW和MSVC冲突了(这是两个不同的编译器及其库文件):

我又按照上述方法,清理掉了“附加包含目录”中的路径。

我们想要直接在Visual Studio (MSVC) 中使用<unistd.h>是不行的,后者是UNIX 系统上使用的头文件,Windows 和 MSVC 默认是不提供的。想要使用可以考虑一些第三方库的跨平台库。

回过头来,在VS2019上include路径的方法还是对的。只是我们要考虑平台的不同所带来的问题。


参考链接:链接 链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值