Определения функций, отсутствующие в 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.намек.