为什么这会破坏Visual Studio的Intellisense?

时间:2011-09-18 00:20:05

标签: visual-studio visual-studio-2008 visual-c++ intellisense

有谁知道为什么Visual Studio 2008的Intellisense表现得很有趣?

如果我说BEGIN_MSG_MAP,我就明白了:

如果我说BEGIN_MSG_MAP_FOO,我就明白了:

无论哪种方式,宏都是未定义的,那么交易是什么?

而且不,我没有在任何地方使用 Force Include ,所以这是实际的整个源文件 - 几乎没有定义,如下所示:

2 个答案:

答案 0 :(得分:0)

也许END_MSG_MAP()有一个}会关闭CMyDialog的范围,因此test()将在全球范围内。查看下拉列表。正是这样。

答案 1 :(得分:0)

注意:这个答案完全基于推测,如果有人基于对IntelliSense如何工作的实际知识发布了一个好的答案,我将很乐意提出并删除我的。

我认为IntelliSense有一些特殊情况可以默认处理最常见的MFC / ATL宏,或者它可能会假设可能包含一些默认标头,以便能够处理您的文件,即使它没有'包含MFC标头,可以包含在.cpp中,其中已包含此类默认标头(通常在标头中可见,即使它们应包括其依赖项)。

但是BEGIN_MSG_MAP_FOO是一个完全未知的宏,它开始表现得很有趣,因为它实际上是一个未知的标识符,可能被解释为一些可能关闭当前范围的未知宏。因此,在它之后,它“安全地播放”并重新开始解析,因为它是新文件的开头,并认为test是一个全局函数(由左上角组合框证明),其中{{ 1}}毫无意义。