有谁知道为什么Visual Studio 2008的Intellisense表现得很有趣?
如果我说BEGIN_MSG_MAP
,我就明白了:
如果我说BEGIN_MSG_MAP_FOO
,我就明白了:
无论哪种方式,宏都是未定义的,那么交易是什么?
而且不,我没有在任何地方使用 Force Include ,所以这是实际的整个源文件 - 几乎没有定义,如下所示:
答案 0 :(得分:0)
也许END_MSG_MAP()
有一个}
会关闭CMyDialog
的范围,因此test()
将在全球范围内。查看下拉列表。正是这样。
答案 1 :(得分:0)
注意:这个答案完全基于推测,如果有人基于对IntelliSense如何工作的实际知识发布了一个好的答案,我将很乐意提出并删除我的。
我认为IntelliSense有一些特殊情况可以默认处理最常见的MFC / ATL宏,或者它可能会假设可能包含一些默认标头,以便能够处理您的文件,即使它没有'包含MFC标头,可以包含在.cpp
中,其中已包含此类默认标头(通常在标头中可见,即使它们应包括其依赖项)。
但是BEGIN_MSG_MAP_FOO
是一个完全未知的宏,它开始表现得很有趣,因为它实际上是一个未知的标识符,可能被解释为一些可能关闭当前范围的未知宏。因此,在它之后,它“安全地播放”并重新开始解析,因为它是新文件的开头,并认为test
是一个全局函数(由左上角组合框证明),其中{{ 1}}毫无意义。