Конец заголовка не в области видимости файла pch файл intellisense не был создан

Обновлено: 04.07.2024

Например, если я добавлю один заголовок:

Она исчезает. Как я могу остановить отображение этой ошибки без добавления (потенциально неиспользуемого) include>

3 ответа

Я получаю странную ошибку Intellisense в VS 2010 году. Я безуспешно искал в Интернете. Похоже, что никто еще не получал этой ошибки раньше. IntelliSense: PCH warning: header stop needs to be at global scope. An intellisense PCH file was not generated. Вслед за этим много других ошибок, так как он.

При добавлении файла .cpp он наследует настройки PCH проекта. Более подробное объяснение проблемы здесь

  1. Настройка проекта так, чтобы он не использовал предварительно скомпилированные заголовки
  2. Отключите использование PCH для того файла cpp, который вы добавили, что очистит как IntelliSense, так и компилятор warning/error.

Обратите внимание! Я включаю число 2 и 3, потому что некоторые говорят, что это помогло, но только число 1 решило мое дело.

Я полагаю, проблема в том, что у вас есть предварительно скомпилированный заголовок в вашем проекте (по умолчанию "stdafx.h"), и для правильного решения проблемы вы должны добавить

в начале вашего заголовка/исходного файла.

Перейдите в свойство проекта и в разделе C/C++ => Предварительно скомпилированные заголовки найдите опцию "Precompiled header".

Измените его на "Not Using Precompiled Headers".

enter image description here

Похожие вопросы:

Можно ли отключить предупреждение модификатор 'private' избыточен (RECS014) IntelliSense?

Я использую Clang C API для анализа и получения диагностики. Я заметил, что все время использую один и тот же bundle заголовков, поэтому решил попробовать использовать PCH или PTH для повышения.

Я получаю странную ошибку Intellisense в VS 2010 году. Я безуспешно искал в Интернете. Похоже, что никто еще не получал этой ошибки раньше. IntelliSense: PCH warning: header stop needs to be at.

Почему microsoft visual studio подчеркивает int красной линией, говоря IntelliSense: PCH предупреждение: не удается найти подходящее место остановки заголовка. Файл intellisense PCH не был.

Я пытаюсь использовать nltk для обработки некоторых слов, но есть предупреждение. Я узнаю, что если есть такое слово, как нации , то программа выдаст предупреждение. Интересно, есть ли какой-нибудь.

Я создал расширение Visual Studio, которое предоставляет intellisense для моего доменного языка, унаследовав его от Microsoft.VisualStudio.Language.Intellisense.ICompletionSource. Это работает.

У меня есть проект ATL C++, и у меня нет никаких включений в один из моих исходных файлов C++. Когда я пытаюсь скомпилировать, я получаю предупреждение PCH: Ошибка (активная) E2940 PCH.

У меня есть проект ATL C++, и у меня нет никаких включений в один из моих исходных файлов C++.

Когда я пытаюсь скомпилировать, я получаю предупреждение PCH:

Ошибка (активная) E2940 PCH предупреждение: произошла неизвестная ошибка. Файл IntelliSense PCH не был сгенерирован.

Но проект прекрасно компилируется вместе с этим предупреждением.

Что еще я могу сделать, чтобы решить эту проблему?

2 ответа

Я получаю странную ошибку Intellisense в VS 2010 году. Я безуспешно искал в Интернете. Похоже, что никто еще не получал этой ошибки раньше. IntelliSense: PCH warning: header stop needs to be at global scope. An intellisense PCH file was not generated. Вслед за этим много других ошибок, так как он.

Почему microsoft visual studio подчеркивает int красной линией, говоря IntelliSense: PCH предупреждение: не удается найти подходящее место остановки заголовка. Файл intellisense PCH не был сгенерирован для этого кода. int main() < return 0; >Он работает нормально

Как уже упоминалось в этом ответе, закрытие и повторное открытие решения отлично сработало для меня.

Похожие вопросы:

Можно ли отключить предупреждение модификатор 'private' избыточен (RECS014) IntelliSense?

Я получаю странную ошибку Intellisense в VS 2010 году. Я безуспешно искал в Интернете. Похоже, что никто еще не получал этой ошибки раньше. IntelliSense: PCH warning: header stop needs to be at.

Почему microsoft visual studio подчеркивает int красной линией, говоря IntelliSense: PCH предупреждение: не удается найти подходящее место остановки заголовка. Файл intellisense PCH не был.

Пожалуйста, оставьте окно установки метки в - этот Q/A не для C++ эксперты , но для таких людей, как я, которые используют C++, когда им это нужно. Они могут столкнуться с этой потенциальной потерей.

Я пытаюсь plot в базе R с обычным plot() fcn. Однако при передаче вектора, который pch использовать, он не будет plot pch, он будет только plot число '1' вместо формы pch, которую я вызываю.

У меня есть проект ATL C ++, и у меня нет ни одного включения в один из моих исходных файлов C ++.

Когда я пытаюсь скомпилировать, я получаю предупреждение PCH:

Ошибка (активная) E2940 Предупреждение PCH: произошла неизвестная ошибка. Файл IntelliSense PCH не был создан.

Но проект прекрасно компилируется вместе с этим предупреждением.

Что еще я могу сделать, чтобы решить эту проблему?

Решение

Как уже упоминалось в этот Ответ, закрытие и повторное открытие решения работало нормально для меня.

Другие решения

Если я добавлю один заголовок, например:

Это исчезает. Как я могу остановить отображение этой ошибки без добавления (потенциально неиспользуемого) include>

3 ответа

При добавлении файла .cpp он наследует настройки PCH проекта. Более подробное объяснение проблемы здесь

  1. Настройка вашего проекта не использовать предварительно скомпилированные заголовки
  2. Отключите использование PCH для того одного файла cpp, который вы добавили, что очистит как IntelliSense, так и предупреждение /ошибку компилятора.

Внимание! Я включил число 2 и 3, потому что некоторые говорят, что это помогло, но только число 1 помогло решить мою проблему.

Я полагаю, проблема в том, что у вас есть предварительно скомпилированный заголовок в вашем проекте (по умолчанию "stdafx.h") и для правильного решения проблемы вы должны добавить

в начале вашего заголовочного /исходного файла.

Перейдите в свойство проекта и в разделе C /C ++ => Предварительно скомпилированные заголовки , найдите параметр «Предварительно скомпилированные заголовки».

Измените его на «Не использовать предварительно скомпилированные заголовки».

A few of my header files have no includes, so I receive this message in Visual Studio 2010:

If I add a single header, for instance:

It disappears. How can I stop this error from showing without adding (potentially unused) include>

3 Answers 3

When adding a .cpp file it inherits the PCH settings of the project. More detailed explanation of the problem here

При создании нового проекта в Visual Studio в проект добавляется файл предкомпилированного заголовка с именем pch.h. (В Visual Studio 2017 и более ранних версиях файл назывался stdafx.h.) Цель файла — ускорить процесс сборки. Здесь следует включить любые стабильные файлы заголовков, например заголовки стандартной библиотеки, такие как <vector> . Предкомпилированный заголовок компилируется только в том случае, если он или какие-либо содержащиеся в нем файлы были изменены. Если изменения вносятся только в исходный код проекта, при сборке будет пропущена компиляция для предкомпилированного заголовка.

Параметры компилятора для предкомпилированных заголовков — /Y. На страницах свойств проекта параметры находятся в разделе Свойства конфигурации > C/C++ > Предварительно скомпилированные заголовки. Можно не использовать предкомпилированные заголовки, а также указать имя файла заголовка и путь к выходному файлу.

Настраиваемый предварительно скомпилированный код

Для больших проектов, для которых требуется значительное время, может потребоваться создать настраиваемые предварительно скомпилированные файлы. Компиляторы Microsoft C и C++ содержат параметры для предварительной компиляции любого кода C или C++, включая встроенный код. Данная возможность позволяет скомпилировать стабильное тело кода, сохранять скомпилированное состояние кода в файле, а при последующих компиляциях объединять предварительно скомпилированный код с кодом, который еще находится в стадии разработки. Каждая последующая компиляция выполняется быстрее, так как стабильный код не нужно компилировать повторно.

Случаи использования предварительной компиляции исходного кода

Предварительно скомпилированный код полезен во время цикла разработки, чтобы сократить время компиляции, особенно если:

Всегда используется большой текст кода, в который редко вносятся изменения.

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

Первая компиляция, которая создает файл предкомпилированного заголовка (PCH), занимает немного больше времени, чем последующие компиляции. Последующие компиляции могут выполняться быстрее, включая предварительно скомпилированный код.

Можно предварительно скомпилировать программы C и C++. В программировании на языке C++ распространенной практикой является отделение сведений об интерфейсе класса в файлы заголовков. Впоследствии эти файлы заголовков можно будет включать в программы, использующие класс. Предварительная компиляция этих заголовков позволяет сократить время, затрачиваемое программой на компиляцию.

Хотя для каждого исходного файла можно использовать только один файл предкомпилированного заголовка (PCH), в проекте можно использовать несколько файлов PCH.

Два варианта предварительной компиляции кода

Можно предварительно скомпилировать любой код C или C++ — вы не ограничены предварительной компиляцией только файлов заголовков.

Для предварительной компиляции требуется планирование, но при предварительной компиляции исходного кода, отличного от простых файлов заголовков, обеспечивается значительно более быстрая компиляция.

Предварительная компиляция кода рекомендуется, когда известно, что исходные файлы используют общие наборы файлов заголовков, но не содержат их в том же порядке, или если требуется включить исходный код в предварительную компиляцию.

Параметры предкомпилированного заголовка см. в разделах /Yc (создание файла предкомпилированного заголовка) и /Yu (использование файла предкомпилированного заголовка). Для создания предкомпилированного заголовка используйте /Yc. При использовании с необязательной прагмой hdrstop параметр /Yc позволяет предварительно компилировать как файлы заголовков, так и исходный код. Выберите /Yu, чтобы использовать существующий предкомпилированный заголовок в существующей компиляции. Можно также использовать /Fp с параметрами /Yc и /Yu, чтобы предоставить альтернативное имя предкомпилированному заголовку.

В справочных разделах, посвященных параметрам компилятора /Yu и /Yc, обсуждаются способы доступа к этой функции в среде разработки.

Правила согласованности предкомпилированных заголовков

Поскольку файлы PCH содержат сведения о среде компьютера, а также сведения об адресах памяти для программы, файл PCH следует использовать только на том компьютере, на котором он был создан.

Правила целостности для пофайлового использования предкомпилированных заголовков

Параметр компилятора /Yu позволяет указать, какой файл PCH следует использовать.

При использовании файла PCH компилятор предполагает ту же среду компиляции, которая использует последовательные параметры компилятора, прагмы и т. д., которые действуют при создании файла PCH, если не указано иное. Если компилятор обнаруживает несогласованность, он выдает предупреждение и по возможности определяет несогласованность. Такие предупреждения не обязательно указывают на проблему с файлом PCH. Они просто предупреждают о возможных конфликтах. Требования к согласованности для файлов PCH описаны в следующих разделах.

Согласованность параметров компилятора

Следующие параметры компилятора могут вызвать предупреждение о несогласованности при использовании файла PCH:

Макросы, созданные с помощью параметра препроцессора (/D), должны быть одинаковыми в компиляциях, создавшими файл PCH, и текущей компиляцией. Состояние определенных констант не проверяется, но при их изменениях могут возникать непредсказуемые результаты.

Файлы PCH не работают с параметрами/E и /EP.

Файлы PCH должны быть созданы с помощью параметра создания сведений о просмотре (/FR) или исключения локальных переменных (/Fr), прежде чем последующие компиляции, использующие файл PCH, смогут использовать эти параметры.

C7 совместимо (/Z7)

Если при создании файла PCH этот параметр включен, последующие компиляции, использующие файл PCH, могут использовать отладочную информацию.

Если при создании файла PCH параметр "C7 совместимо (/Z7)" отключен, последующие компиляции, использующие файл PCH и/Z7, вызывают предупреждение. Отладочная информация помещается в текущий OBJ-файл, а локальные символы, определенные в файле PCH, недоступны отладчику.

Согласованность пути включаемых файлов

В файле PCH не содержатся сведения о пути включаемых файлов, который применялся при создании. При использовании файла PCH компилятор всегда использует путь включаемых файлов, указанный в текущей компиляции.

Согласованность исходного файла

При указании параметра использования файла предкомпилированного заголовка (/Yu) компилятор игнорирует все директивы препроцессора (включая прагмы), отображаемые в исходном коде, который будет предварительно скомпилирован. Компиляция, указанная такими директивами препроцессора, должна совпадать с компиляцией, используемой для параметра создания файла предкомпилированного заголовка (/Yc).

Согласованность прагмы

Прагмы, обработанные во время создания файла PCH, обычно влияют на файл, с которым впоследствии используется файл PCH. Прагмы comment и message не влияют на оставшуюся часть компиляции.

Они влияют только на код в файле PCH; они не влияют на код, который впоследствии использует файл PCH:

Эти прагмы сохраняются как часть предкомпилированного заголовка и влияют на оставшуюся часть компиляции, использующую предкомпилированный заголовок:

alloc_text
auto_inline
check_stack
code_seg
data_seg

function
include_alias
init_seg
inline_depth

inline_recursion
intrinsic
optimize
pack

pointers_to_members
setlocale
vtordisp
warning

Правила целостности для параметров компилятора /Yc и /Yu

При использовании предкомпилированного заголовка, созданного с помощью параметра /Yc или/Yu, компилятор сравнивает текущую среду компиляции с той, которая существовала при создании файла PCH. Не забудьте указать среду, соответствующую предыдущей (с помощью параметров компилятора, прагм и т. д.) для текущей компиляции. Если компилятор обнаруживает несогласованность, он выдает предупреждение и по возможности определяет несогласованность. Такие предупреждения не обязательно указывают на проблему с файлом PCH. Они просто предупреждают о возможных конфликтах. В следующих разделах объясняются требования к согласованности для предкомпилированных заголовков.

Согласованность параметров компилятора

В таблице ниже перечислены параметры компилятора, которые могут вызвать предупреждение о несогласованности при использовании предкомпилированного заголовка.

Параметр name Правило
/D Определение констант и макросов Должны быть одинаковыми в компиляции, создавшей предкомпилированный заголовок, и в текущей компиляции. Состояние определенных констант не проверяется, но если файлы зависят от значений измененных констант, могут возникать непредсказуемые результаты.
/E или /EP Копирование выходных данных препроцессора в стандартный вывод Предкомпилированные заголовки не работают с параметром /E или /EP.
/FR или /FR Создание сведений о браузере исходного кода Майкрософт Чтобы параметры /Fr и /FR были допустимыми вместе с параметром /Yu, они также должны применяться при создании предкомпилированного заголовка. При последующих компиляциях, использующих предкомпилированный заголовок, также создаются сведения о браузере исходного кода. Сведения о браузере помещаются в один SBR-файл, и на него ссылаются другие файлы так же, как и сведения CodeView. Нельзя переопределить размещение сведений о браузере исходного кода.
/GA, /GD, /GE, /Gw или /GW Параметры протокола Windows Должны быть одинаковыми в компиляции, создавшей предкомпилированный заголовок, и в текущей компиляции. Если эти параметры различаются, выдается предупреждение.
/ZI Создание полной отладочной информации Если при создании предкомпилированного заголовка этот параметр включен, последующие компиляции, использующие предварительную компиляцию, могут использовать отладочную информацию. Если при создании предкомпилированного заголовка параметр /Zi не был включен, последующие компиляции, использующие предварительную компиляцию и параметр /Zi, выдают предупреждение. Отладочная информация помещается в текущий OBJ-файл, а локальные символы, определенные в предкомпилированном заголовке, недоступны отладчику.

Средство предварительно откомпилированных заголовков предназначено для использования только в исходных файлах C и C++.

Использование предкомпилированных заголовков в проекте

В предыдущих разделах представлен обзор предкомпилированных заголовков: /Yc и /Yu, параметра /FP и прагмы hdrstop. В этом разделе описывается метод использования в проекте параметров заголовков, предкомпилированных вручную. В конце раздела приводится пример файла makefile и кода, который управляет им.

Чтобы ознакомиться с другим подходом к использованию в проекте параметров заголовков, предкомпилированных вручную, изучите один из файлов makefile, расположенных в каталоге MFC\SRC, который создается во время установки Visual Studio по умолчанию. Подход в этих файлах makefile аналогичен представленному в этом разделе, однако в них используются макросы служебной программы обслуживания Майкрософт (NMAKE) и обеспечивается больший контроль над процессом сборки.

PCH-файлы в процессе построения

База кода проекта программного обеспечения обычно содержится в нескольких исходных файлах C или C++, объектных файлах, библиотеках и файлах заголовков. Как правило, файл makefile координирует объединение этих элементов в исполняемый файл. На следующем рисунке показана структура файла makefile, использующего файл предкомпилированного заголовка. Имена макросов и имена файлов на рисунке соответствуют приведенным в примере кода в разделах Пример файла makefile для PCH и Пример кода для PCH.

На рисунке для отображения последовательности процесса сборки используются три схематических элемента. Прямоугольники представляют каждый файл или макрос; три макроса представляют один или несколько файлов. Затененные области представляют каждое действие компиляции или компоновки. Стрелки показывают, какие файлы и макросы объединяются во время процесса компиляции или компоновки.


Структура файла makefile, использующего файл предкомпилированного заголовка

Начиная с верхней части диаграммы, STABLEHDRS и BOUNDRY являются макросами NMAKE, в которых вы перечислите файлы, которые, скорее всего, не потребуют перекомпиляции. Эти файлы компилируются с помощью командной строки

CL /c /W3 /Yc$(BOUNDRY) applib.cpp myapp.cpp

только если файл предкомпилированного заголовка (STABLE.pch) не существует или если вы вносите изменения в файлы, перечисленные в двух макросах. В любом случае файл предкомпилированного заголовка будет содержать код только из файлов, перечисленных в макросе STABLEHDRS. Перечислите последний файл, который необходимо предварительно откомпилировать в макросе BOUNDRY.

Файлы, перечисленные в этих макросах, могут быть файлами заголовков или файлами исходного кода C или C++. (Один файл PCH нельзя использовать одновременно с модулями C и C++.) Обратите внимание, что можно использовать макрос hdrstop, чтобы прервать предварительную компиляцию в любой момент в файле BOUNDRY. Дополнительные сведения см. в разделе hdrstop.

Далее APPLIB.obj на схеме представляет код поддержки, используемый в окончательном приложении. Он создается из APPLIB.cpp, файлов, перечисленных в макросе UNSTABLEHDRS, и предварительно скомпилированного кода из предкомпилированного заголовка.

MYAPP.obj представляет конечное приложение. Он создается из файла MYAPP.cpp, файлов, перечисленных в макросе UNSTABLEHDRS, и предварительно скомпилированного кода из предкомпилированного заголовка.

Наконец, создается исполняемый файл (MYAPP.EXE) путем связывания файлов, перечисленных в макросе OBJS (APPLIB.obj и MYAPP.obj).

Образец файла makefile для PCH

В следующем файле makefile используются макросы и структура команд потока управления !IF, !ELSE, !ENDIF для упрощения адаптации к проекту.

Помимо макросов STABLEHDRS, BOUNDRY и UNSTABLEHDRS, показанных на рисунке "Структура файла makefile, использующего файл предкомпилированного заголовка" в разделе PCH-файлы в процессе сборки, этот файл makefile предоставляет макрос CLFLAGS и макрос LINKFLAGS. Эти макросы необходимо использовать для перечисления параметров компилятора и компоновщика, которые применяются при сборке отладочной или финальной версии исполняемого файла приложения. Также имеется макрос LIBS, в котором перечислены библиотеки, необходимые для проекта.

Файл makefile также использует структуру команд !IF, !ELSE, !ENDIF для обнаружения того, определен ли символ DEBUG в командной строке NMAKE:

Эта функция позволяет использовать один и тот же файл makefile во время разработки и для финальных версий программы — используйте DEBUG=0 для финальных версий. Следующие строки команды являются эквивалентными.

Дополнительные сведения о файлах makefile см. в разделе Справочник по NMAKE. См. также разделы Параметры компилятора MSVC и Параметры компоновщика MSVC.

Пример кода для PCH

Следующие исходные файлы используются в файле makefile, который описан в разделах PCH-файлы в процессе сборки и Образец файла makefile для PCH. Обратите внимание, что комментарии содержат важную информацию.

Читайте также: