Почему это нарушает IntelliSense Visual Studio? - PullRequest
0 голосов
/ 18 сентября 2011

Кто-нибудь знает, почему Intellisense в Visual Studio 2008 ведет себя забавно?

Если я скажу BEGIN_MSG_MAP, я получу это:

Если я скажу BEGIN_MSG_MAP_FOO, я получуэто:

В любом случае, все макросы не определены , так в чем же дело?

И нет, яя нигде не использую Force Include , так что это фактически весь исходный файл - здесь практически ничего не определено, как показано ниже:

Ответы [ 2 ]

0 голосов
/ 18 сентября 2011

Обратите внимание: этот ответ основан исключительно на предположениях, если кто-то отправит хороший ответ, основанный на фактических знаниях о том, как работает IntelliSense, я буду рад объявить его и удалить мой.

Я полагаю, что у IntelliSense есть какой-то особый случай для обработки по умолчанию наиболее распространенных макросов MFC / ATL, или, возможно, предполагается, что некоторые заголовки по умолчанию могут быть включены, чтобы иметь возможность обрабатывать тот факт, что ваш файл, даже если он не ' t включают заголовки MFC, могут быть включены в .cpp, где такие заголовки по умолчанию уже включены (что часто видно в заголовках, даже если они должны включать их зависимости).

Но будучи BEGIN_MSG_MAP_FOO совершенно неизвестным макросом, он начинает вести себя забавно, потому что на самом деле это неизвестный идентификатор, вероятно, интерпретируемый как некий неизвестный макрос, который может закрыть текущую область. Таким образом, после этого он «воспроизводит это безопасно» и перезапускает синтаксический анализ, как это было в начале нового файла, и думает, что test является глобальной функцией (что подтверждается верхним левым списком), где this делает нет смысла.

0 голосов
/ 18 сентября 2011

Может быть, END_MSG_MAP() имеет }, который закрывает область действия CMyDialog, следовательно, test() будет в глобальной области действия. Посмотрите на выпадающие списки. Именно это.

...