智能感知包括不应包含的内容

IntelliSense Including Things that Shouldn't be Included

本文关键字:包含 感知 包括不 智能      更新时间:2023-10-16

我正在Visual Studio 2010中做一个项目。我的项目不应该局限于Windows,然而,其中一个文件是操作系统相关的。

由于这个原因,我在.cpp文件的中只有中的#include <windows.h>。没有其他文件包含这个.cpp文件。因此,从逻辑上讲,windows.h头应该对解决方案的其余部分不可见。

这意味着除了.cpp之外,我在所有文件中与Windows库中的声明没有任何名称冲突,并且我的项目编译得很好。

然而,IntelliSense一直坚持认为我有名称冲突。当我按下Ctrl+Space时,智能感知提示来自windows.h的标识符。这是在windows.h应该是不可见的范围!

是否有一个设置我可以改变来停止这个恼人的行为?

我100%肯定这个问题不是我的解决方案的结构,因为如果我在我的项目的另一部分使用windows.h中已经定义的标识符,编译器不识别它,它不编译…但智能感知识别它!

引用微软vc++员工Andy Rich对这篇博客文章的评论:智能感知缓慢的故障排除技巧

浏览数据库将找到以某种方式包含在项目中的所有源文件,无论是直接包含还是作为其他#include指令的结果。这是不可配置的,并且为了让IDE能够提供准确的答案,这是必要的。

所以不幸的是,答案是否定的,除了完全禁用智能感知之外,你什么也做不了。

由于IntelliSense工作在每个项目基础(.vcproj)上,而不是每个解决方案(.sln)上,因此简单的答案是将特定于windows的部分移动到解决方案中它们自己的项目中。

这也有助于移植,因为您可以更容易地替换特定于windows的部分。