5

问题:我的语法高亮和 IntelliSense 坏了。我有一个像这样的 C++ 源文件:

#include "stdafx.hpp"

#ifdef SOMETHING
do_some_stuff;
#endif

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

#ifdef DEFINE_SOMETHING
#define SOMETHING
#endif

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

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

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

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

4

5 回答 5

14

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

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

在 VS19 中,它是 Tools / Options / Text Editor / C/C++ / View / Inactive Code / Show Inactive Blocks。

于 2013-12-18T07:16:12.827 回答
3

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

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

在扩展/C/C++

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

最好的,杰弗里

于 2020-06-30T20:15:24.267 回答
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 平台工具集构建您的项目。这使得迁移相当简单,无需任何源代码更改。

于 2013-02-01T06:01:03.547 回答
1

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

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

于 2013-02-03T22:02:22.683 回答
0

我通过更改C_Cpp.default.intelliSenseMode解决了这个问题(在 VSCode 中)

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

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

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

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

我不知道等效的VS选项,对不起。

于 2021-08-31T20:53:02.557 回答