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路径的方法还是对的。只是我们要考虑平台的不同所带来的问题。
参考链接:链接 链接