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

Ric*_*dle 5 visual-studio-2005 syntax-highlighting visual-studio

问题:我的语法突出显示和IntelliSense被破坏了.我有一个像这样的C++源文件:

#include "stdafx.hpp"

#ifdef SOMETHING
do_some_stuff;
#endif
Run Code Online (Sandbox Code Playgroud)

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

#ifdef DEFINE_SOMETHING
#define SOMETHING
#endif
Run Code Online (Sandbox Code Playgroud)

DEFINE_SOMETHING在项目的项目属性中定义(在C++/Preprocessor下).

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

问题是:我怎样才能使Visual Studio得到正确的(不太可能)或者关掉它认为已经出现的灰色代码的事实#ifdef

(重新排列代码不是一个选项 - 它是一个庞大而复杂的系统,其文件是在各种环境中构建的,Visual Studio只是其中之一.我使用的是Visual Studio 2005,但我很想知道这是否是在更高版本中修复或可处理.)

小智 10

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

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


Geo*_*roy 7

根据 aousov 之前的回答,我检查了 VSCode 并发现了此设置:

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

在扩展/C/C++ 中

这可能与您使用的版本有关(在我的例子中是1.46.1)。

最好的,杰弗里

  • 哦,这是真的!我把两者都搞混了!也许使用 VSCode 的人将来会经过并发现它很有用:) (2认同)

Owe*_*erd 1

您描述的问题与 VS 2005 中的课程相同。由于完全重新设计的 Intellisense 系统,该问题在 Visual Studio 2010 及更高版本中得到修复。这并不直接适用于您的问题,但这里有一些有关底层架构的信息: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 平台工具集构建项目。这使得迁移相当简单,无需更改任何源代码。