Visual studio 在Visual Studio中禁用或修复#ifdef敏感着色和intellisense

Visual studio 在Visual Studio中禁用或修复#ifdef敏感着色和intellisense,visual-studio,visual-studio-2005,syntax-highlighting,Visual Studio,Visual Studio 2005,Syntax Highlighting,问题:我的语法高亮显示和智能感知被破坏。我有一个C++源文件,像这样: #include "stdafx.hpp" #ifdef SOMETHING do_some_stuff; #endif 其中stdafx.hpp(项目的预编译头)包括一个.h文件,该文件说明: #ifdef DEFINE_SOMETHING #define SOMETHING #endif 和DealEXORION/在项目的Project属性中定义(在C++ +预处理器下)。 VisualStudio正在迷失方向,显

问题:我的语法高亮显示和智能感知被破坏。我有一个C++源文件,像这样:

#include "stdafx.hpp"

#ifdef SOMETHING
do_some_stuff;
#endif
其中
stdafx.hpp
(项目的预编译头)包括一个
.h
文件,该文件说明:

#ifdef DEFINE_SOMETHING
#define SOMETHING
#endif

DealEXORION/<代码>在项目的Project属性中定义(在C++ +预处理器下)。 VisualStudio正在迷失方向,显示

do\u一些东西(实际上是很多行代码)纯灰色-我既没有语法着色也没有智能感知

问题:我如何才能使Visual Studio正确(不太可能)或关闭它正在灰显它认为是
#ifdef
'd的代码这一事实


(重新排列代码不是一个选项——它是一个庞大而复杂的系统,其文件是在各种环境中构建的,Visual Studio只是其中的一个。我使用VisualStudio 2005,但我很想知道这是在以后版本中是固定的还是可工作的)。由于完全重新设计的Intellisense系统,它在Visual Studio 2010和更高版本中得到了修复。这并不直接适用于您的问题,但以下是有关底层体系结构的一些信息:

有一些事情你可以尝试,一些项目结构的改变可以帮助最小化问题的发生频率,但是无论你做什么,都将是命中或未命中,不管怎样,问题最终会再次出现。唯一真正的解决方案是使用更新的IDE

通过安装VS2010和Daffodil(),您可以继续使用VS2005构建工具,然后在VS2010中使用v80平台工具集构建项目。这使得迁移非常简单,不需要任何源代码更改。

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


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

如果有人仍然感兴趣,请关闭灰显功能#ifdef:

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

在VS19中,它是工具/选项/文本编辑器/C/C++/View/Inactive Code/Show Inactive Blocks。

在前面的aousov回答之后,我检查了我的VSCode并找到了此设置:

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

在Extensions/C/C中++

这可能与您正在使用的版本有关(在我的示例1.46.1中)

最好的,
Geoffroy

我无法在VS-2010中重现这个问题:Visual Studio立即获取
定义某物的定义,将
\ifdef
-ed区域灰显。可能吧,但我不愿意这样做,因为“大型复杂系统,其文件构建在各种环境中”的事情。这个例子被简化了-关于是否定义
某个东西的真正规则更复杂,将来可能会改变。我有时成功的另一个技巧是在#ifdef中包含另一个头文件,而不是在有问题的头文件中定义任何东西。子文件只是一个伪文件,只包含一个#define。不应该在其他平台上破坏任何东西。但事实是,这个系统已经崩溃了。我还在大型代码段中间随机设置了灰色部分,附近没有IFDEF。该选项似乎在visual studio 2017中消失了。检查后,我发现行末尾缺少一个
}
大括号,我确定我至少检查了5次。因此,我们正是因为这个原因而失败的。我注意到它是因为
#如果myHeaderName
已经高亮显示,这意味着已经有东西定义了这个块。删除此
#ifndef
使intellisense再次工作,并使我认为需要找到丢失的大括号。我做到了(谢谢,这很有用。但是请注意,这个答案是针对VisualStudio代码的,最初的问题是关于VisualStudio的。)哦,那是真的!我把两者都弄糊涂了!也许使用VSCode的人会路过,发现它在将来很有用:)