Visual Studio Code不能在C++中高亮显示#if..

3
我试图让VS-Code为我的C++项目工作,但是我遇到了一个问题,即语法高亮会忽略预处理指令,例如#if/#else/#endif
我已经安装了ms-vscode.cpptools(C/C++)和ext install code-gnu-global(Intellisense)扩展。
“转到定义”正确显示了#define

enter image description here

"

#define ON_TARGET false的结果是相同的高亮显示

它应该看起来像这样:

"

enter image description here


4
在这种罕见的情况下,截图可能比仅有的文字描述更好。 - Melebius
添加了一张截图。 - thetemplar
1
VSCode不是编译器,而且它也不知道你的代码意味着什么。 - n. m.
但是如果我用“1”或“0”替换变量,为什么它还能工作呢?(见第二张图片) - thetemplar
因为#define 0非常清晰,你甚至不需要编译器就能理解它。 - dab0bby
显示剩余2条评论
2个回答

4
自2018年2月起,使用微软的C/C++扩展程序,VS Code可以实现此功能. v 0.15

enter image description here


我不小心把它停用了。我该如何重新激活它? - Mohammad Kholghi
3
转到设置文件/首选项/设置或按ctrl +,然后在“搜索设置”字段中键入“dim inactive regions”,您将看到启用和禁用它的选项。 - Joel Santos Rico
@JoelSantosRico 工作得很好,谢谢!但是我该如何定义缺失的变量呢? - undefined
不太确定你的意思。你有两个定义的来源,一个是你在代码中明确添加的(在我的截图中,#define HAL_CONFIG)。如果它在同一个文件中,VS Code 就会识别到它。如果它不在同一个文件中(比如另一个头文件,你用 #include 包含进来的),那么你就要确保你的 c_cpp_settings.json 中的 includePath 包含了它所在文件夹的路径。我会在下一个评论中继续。 - undefined
或者,一些宏在编译时在命令行中定义。我的做法是触发一次编译(使用您的IDE、make或其他方法),并捕获完整的编译命令。这些宏的定义方式可能因编译器而异,在GCC中,它们采用-DNAME=VALUE的形式,相当于在代码中添加一行#define NAME VALUE。您还可以将所有这些编译时定义添加到c_cpp_properties.json中的defines键中。请参考此链接:https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference - undefined

1
Visual Studio Code不能直接完成这些任务,因为它只是一个“编辑器”。
如果编译您的代码,则可以按预期工作。
要评估此类定义,您需要一个IDE,例如Visual Studio、CLion或者您可以通过其他插件(例如C/C++ Plugin)来实现。

1
好的,谢谢。我以为VSCode不仅仅是一个编辑器。所以如果我想要一个编辑器/IDE,我可以坚持使用Aton/Notepad++或者“真正的”VS。我以为VSCode可能是一个轻量级的IDE,误解了它... - thetemplar
@thetemplar,你可以在VSCode中做更多的事情,不仅仅是编辑代码。你可以设置断点、调试代码或执行定义的任务。而且它可以在Windows、macOS和Linux上使用。看看这个。链接 - dab0bby
抱歉,你是正确的。但我必须使用第三方编译器和调试器,很遗憾不能使用这些工具,所以我忘记了它们以及其他开发人员的使用。 - thetemplar
我认为经过几年的发展,由于插件的贡献,VSCode 已经变得非常强大,从我的角度来看已经像一个 IDE 了。最近,IDE 和编辑器之间的界限已经变得模糊了。 这个答案在写下来时可能是正确的,但现在已经不再有效了。 - Safwen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接