我最近决定尝试 SublimeText 3,我发现它非常简洁,插件支持很广泛!我最近发现了这个插件:https ://github.com/tomv564/LSP ,我将它与 Clangd 一起使用。但问题是我所知道的错误在我尝试过时会编译。我采取的步骤很简单:
- 安装 Sublime:https ://download.sublimetext.com/Sublime%20Text%20Build%203176%20x64%20Setup.exe
- 为 Windows 安装 CLang.exe 预构建二进制文件:https ://releases.llvm.org/7.0.1/LLVM-7.0.1-win64.exe
- 重新启动计算机(因此可以对 Windows 环境 PATH 进行新的修改)。
- 从包控制安装 LSP
- 输入
LSP: Enable Language Server Globally
命令调色板 clangd
在随后的窗口中输入并点击enter
启用。- 重新启动 Sublime 并打开一个 C++ 文件。
C++ 文件本身没什么特别的,我可以把它贴在这里以确保零歧义:
#include <bits/stdc++.h>
using namespace std;
int main() {
int w, s, c, k;
cin >> w >> s >> c >> k;
bool valid = false;
if (k > s)
valid = true;
else if (k == s)
{
if (w + c < k)
valid = true;
else if (w + c == k)
valid = true;
else if (w == k && c == k)
valid = true;
else if (w + c <= 2 * k)
valid = true;
}
else if (w + c < k)
valid = true;
else if (w + c == k && s <= 2 * k)
valid = true;
cout << (valid ? "YES" : "NO") << endl;
return 0;
}
这个文件是在我通过 WSL 实际运行它时构建的clang++ otherside.cpp
,但是在 Sublime.exe 中,我得到的两个错误是:
- 未找到“位/stdc++.h”文件
- using 指令引用隐式定义的命名空间“std”
- 使用未声明的标识符“cin”
- 使用未声明的标识符“cout”
- 使用未声明的标识符“endl”
我相信三个嵌套的项目符号可以通过“std”错误的解决方案来解决,所以我真的不认为它们是错误吗?
'bits/stdc++.h' 是我在参加编程比赛时使用的一个包含,所以我知道它存在,尽管在工作场所很糟糕,我知道这using namespace std
不是“好的做法”,但至少我知道它不是破坏编译的错误。这个感觉是Clangd的问题,但是我知道我以前用过的带LSP的IDE,比如Visual Studio和CLion都不会报这两个错误。以前有没有其他人解决过这个问题?
更新:我实际上花时间通过运行 Clang.exe来构建clang++ otherside.cpp
小的 cpp 文件。我得到了预期的错误,指定:“致命错误:找不到'bits/stdc++.h'文件”但是,clang++ otherside.cpp
在WSL上使用via编译它就可以了。因此,Windows 和 Linux 之间似乎存在差异。
我发现我需要 Windows 上的 C/C++ 头文件。根据:https : //clang.llvm.org/get_started.html,推荐的是 MSys 实用程序或 GNUWin32。我希望我可以通过 WSL 使用 C/C++ 标头,这可能吗?
22.19 年 2 月 22 日更新:我试图安装 MinGW C 和 C++ 编译器来获取 Clang 的头文件,但看起来如果我想让 Clang 找到这些头文件,我必须从源代码构建 Clang 并修改名为initHeaderSearch.cpp
. 同样,我希望有更多的解决方案,我可以将 WSL 的 C/C++ 头文件与 Clang.exe 一起使用。
此外,作为对我朋友的概念证明,我还在 WSL 上安装了 Sublime,并安装了 LSP-Clangd 插件以表明我在 Windows 上遇到的 Clang 错误都没有出现在 WSL Sublime 上。虽然这些错误确实没有出现在 WSL Sublime 上,但它提出了一个有趣的观点。也许有一种方法可以在 WSL 中启动Clangd 并让 Sublime.exe 与之挂钩?我知道在过去的几年里,WSL 取得了长足的进步,其中产生的一件事就是 AF_UNIX 套接字。不过,我对 unix 套接字并不是最熟悉的,是否可以使用它来启动或与 Clangd 交互?