>问题:我的语法突出显示和智能感知被破坏了。 我有一个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选项,对不起。