问题:我的语法突出显示和智能感知已损坏。我有一个像这样的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,但我有兴趣知道在以后的版本中,这是固定的还是可以解决的。)
答案 0 :(得分:10)
如果有人仍然感兴趣 - 关闭灰色#ifdef:
答案 1 :(得分: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平台工具集构建项目。这使迁移相当简单,没有需要任何源代码更改。
答案 2 :(得分:1)
由于#define SOMETHING是在stdafx.hpp中定义的,表明它始终定义,因为在项目配置中定义了DEFINE_SOMETHING,在项目配置中明确定义SOMETHING是不可能的?
我曾经在VS2005和2008中遇到过类似的问题,冗余的显式定义有时会有所帮助。
答案 3 :(得分:1)
按照aousov的先前答案,我检查了VSCode并找到了此设置:
C_Cpp:无效区域 控制非活动预处理器块的颜色是否与活动代码不同。如果禁用了IntelliSense或使用“默认高对比度”主题,则此设置无效。
在扩展程序/ C / C ++中
这可能与您使用的版本有关(在我的情况下为1.46.1)。
最好, 杰弗罗伊