Определения функций, отсутствующие в intellisense в Visual Studio C++ 2005-2013

следующая проблема мучает один из моих проектов в течение длительного времени:

некоторые определения функций (от .cpp-файлы) исключены / скрыты от intellisense!

невозможно "Goto Определение " для этих функций, ни перечисленные в Панель Навигации.

однако функции отображаются в списке автозаполнения. Проблема для .только файлы cpp, the .H-файлы обрабатываются нормально. Гото Декларация тоже работает.

это то же самое с 2005 года, с каждой новой версией, я надеялся на исправление, но, похоже, он не распознается как ошибка кем-либо еще.

обновление: Я отследил это до следующего: все функции, содержащие определенный макрос, не распознаются intellisense. Исходный макрос был

#define forlist(x,list) for( auto x= list.begin(); x.valid(); ++x)

но вы также можете использовать упрощенный тестовый случай

#define fortest(x)  for( auto x= 1; x< 2; ++x)

void myclass::TestFN()
{
    fortest( g )
    {
        g;
    }
}

следующим шагом было бы найти обходной путь (или попробуйте пройти через отчеты об ошибках micrsoft).

пожалуйста, не разглагольствуйте слишком много об этом макросе. Это существующий код реализации списка, который я не могу изменить. Я просто не мог использовать макрос, но я все еще думаю, что это ошибка VS.

одна забавная вещь, что следующее (Действительно ***IC macro) отлично работает:

#define fortest(x)  for( auto x= 1; x< 2; ++x) {

void myclass::TestFN()
{
    fortest( g )
        g;
    }
}

может быть, intellisense рассматривает случай 1 как незаконное определение локальной функции? (видеть http://connect.microsoft.com/VisualStudio/feedback/details/781121/c-intellisense-mistakes-loop-expression-for-function-definition)

следующая работа тоже

#define fortest(x)  for( auto x= 1; x< 2; ++x)

void myclass::TestFN()
{
    fortest( g )
        g;
}

1 ответов


мы просто должны использовать понятие cpp.hint файлы.

в основном вы должны поместить проблемные макросы в файл с именем cpp.hint и поместите этот файл в свой каталог решений (который не работал для меня) Или в Родительском каталоге, в котором находятся файлы кода. (работал на меня)

в этом файле мы просто помещаем проблемные макросы без правая сторона, например:

#define forlist(x,list)

Примечание: необходимо сбросить кэш IntelliSense для использования новых данных из измененного . Вы должны:

  • удалить (обычно помещается в папку решения).
  • удалить все *.sdf файлы в папке решения.
  • удалить все *.ВК.файлы БД в папке решения или в .

для более продвинутых макросов (как имея макросы "start" и " end " для блоков кода), есть и другие трюки.

исходная ссылка: http://msdn.microsoft.com/en-us/library/dd997977.aspx

причина проблемы в том, что производительность Intellisense (потенциально) резко снизится, если ей придется анализировать все макросы в проекте, поэтому она анализирует только те, которые явно указаны в 'cpp.намек.