在Visual Studio中禁用或修复 #ifdef 敏感的着色和智能感知



>问题:我的语法突出显示和智能感知被破坏了。 我有一个C++源文件,如下所示:

#include "stdafx.hpp"
#ifdef SOMETHING
do_some_stuff;
#endif

其中stdafx.hpp(项目的预编译标头)包含一个.h文件,其中显示:

#ifdef DEFINE_SOMETHING
#define SOMETHING
#endif

DEFINE_SOMETHING在项目的项目属性中定义(在C++/预处理器下)。

Visual Studio正在失去轨道,并以纯灰色显示do_some_stuff;(实际上是很多行代码) - 我既没有语法着色也没有IntelliSense。

问题:我怎样才能让Visual Studio正确(不太可能)做到这一点,或者关闭它认为#ifdef的灰色代码的事实?

(重新排列代码不是一种选择——它是一个庞大而复杂的系统,其文件是在各种环境中构建的,Visual Studio 只是其中之一。 我使用的是Visual Studio 2005,但我想知道这在更高版本中是固定的还是可以解决的。

如果有人仍然感兴趣 - 要关闭灰色 #ifdef:

  • 转到工具 ->选项
  • 打开文本编辑器 -> C/C++ ->格式
  • 取消选中以其他颜色着色非活动代码块

在VS19中,它是工具/选项/文本编辑器/C/C++/视图/非活动代码/显示非活动块。

按照aousov之前的回答,我检查了我的VSCode并找到了此设置:

C_Cpp:暗淡非活动区域控制非活动预处理器块的颜色是否与活动代码不同。如果禁用智能感知或使用默认高对比度主题,则此设置不起作用。

在扩展/C/C++

这可能与您使用的版本有关(在我的情况下为 1.46.1)。

最好杰弗罗伊

> 您描述的问题与VS 2005中的课程相同。它在Visual Studio 2010及更高版本中得到了修复,因为完全重新设计了Intellisense系统。这并不直接适用于你的问题,但下面是有关底层体系结构的一些信息:http://blogs.msdn.com/b/vcblog/archive/2009/05/27/rebuilding-intellisense.aspx

你可以尝试一些方法,一些项目结构的更改可以帮助最小化问题的频率,但无论你做什么都会被击中或错过,无论如何,问题最终都会再次出现。唯一真正的解决方案是使用较新的 IDE。

您可以通过安装 VS 2010 和 Daffodil (http://daffodil.codeplex.com) 来继续使用 VS 2005 构建工具,然后在 VS 2010 中使用 v80 平台工具集构建项目。这使得迁移相当简单,无需任何源代码更改。

由于 #define SOMETHING 是在 stdafx.hpp 中定义的,这表明它总是被定义的,因为DEFINE_SOMETHING是在项目配置中定义的,那么在项目配置中显式定义 SOMETHING 是不可能的吗?

我曾经在VS2005和2008中遇到过类似的问题,冗余的显式定义有时会有所帮助。

我通过更改C_Cpp.default.intelliSenseMode来解决此问题(在VSCode中)

"C_Cpp.default.intelliSenseMode": "windows-gcc-x64"

我正在微控制器上构建一个ARM项目。 它也不是 64 位。 但这确实可以正确解析指令。

对于科学,我尝试了Widows-gcc-ARM,这也正确地照亮了真正活跃的区域。 我也知道 gcc 是在我的 Windows 机器上设置和配置的,虽然我有 clang 和 msvc,但我不使用它们,也不知道它们是否有效 - 所以这可能是为什么gcc更适合我。

您可以尝试此设置,但我相当确定分辨率存在于此选项中。

我不知道

等效的VS选项,对不起。

相关内容

  • 没有找到相关文章

最新更新