Настройка очистки директив include для C/C++ в Visual Studio

Начиная с версии 17.8 Preview 1, Visual Studio может выполнять очистку файлов, которые вы #include, чтобы повысить качество кода C и C++ следующими способами:

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

В этой статье описывается настройка включения очистки в Visual Studio. Дополнительные сведения о Include Cleanup см. в статье Обзор Include Cleanup для C/C++.

Включить параметр «Очистка»

Функция очистки включения отключена по умолчанию.

Включите это, выбрав Сервис>Параметры>Текстовый редактор>C/C++>Code Cleanup и выбрав Включить очистку #include.

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

Диалоговое окно

Установлен флажок **Включить очистку #include** . Отображаются раскрывающиеся списки для параметров **Уровень предложений по удалению неиспользуемых директив include** и **Уровень предложений по добавлению отсутствующих директив include**. Отображается содержимое раскрывающегося списка: **Рефакторинг только**, **Предложение**, **Предупреждение** и **Ошибка**. В раскрывающемся списке **Удаление неиспользуемых включает уровень предложения** одинаковые параметры, но также добавляет **Dimmed**.

Эти параметры определяют, какие уведомления о неиспользуемых заголовках выводит функция Include Cleanup:

Приглушённый

Include Cleanup показывает неиспользуемые заголовки, приглушая строку неиспользуемого файла заголовка в редакторе кода, а также выводя сообщение в окне Список ошибок. В редакторе кода наведите указатель мыши на приглушённый #include, чтобы открыть меню быстрых действий, и выберите Показать возможные исправления или щёлкните раскрывающийся список у значка лампочки, чтобы увидеть действия, связанные с неиспользуемым файлом.

Снимок экрана с приглушённой строкой #include < iostream >.

Строка #include < iostream > отображается приглушённо, поскольку строка кода с использованием iostream закомментирована. Эта строка кода выглядит так: // std::cout << "charSize = " << charSize; Для этой строки кода также отображается меню быстрых действий. В нем говорится, что #include < iostream > не используется в этом файле и содержит ссылку на отображение потенциальных исправлений.

Только рефакторинг: команда «Включить очистку» предоставляет действия, которые можно выполнить через меню быстрых действий в редакторе кода, когда вы наводите указатель мыши на #include или помещаете курсор на строку #include и нажимаете Ctrl+точка:

Снимок экрана: быстрое действие для удаления неиспользуемого заголовка.

При наведении курсора на #include iostream появляется значок лампочки с текстом о том, что #include iostream не используется в этом файле.

Предложение, предупреждение, ошибка: функция «Очистка включаемых файлов» может отображать сообщения очистки включаемых файлов как предложения, предупреждения или ошибки в окне Список ошибок. Вы определяете, какой из них. На следующем снимке экрана списка Error List функция Include Cleanup настроена на отображение неиспользуемых заголовочных файлов с предупреждением. Убедитесь, что в раскрывающемся фильтре выбран параметр Build + Intellisense, чтобы можно было увидеть выходные данные Include Cleanup:

Снимок экрана: окно списка ошибок.

В раскрывающемся фильтре установлено значение **Build + IntelliSense**. Предупреждение видно: VCIC002 - "#include " не используется в этом файле".

Включите эту функцию, выбрав Сервис>Параметры>Все параметры>Языки>C/C++>Очистка кода>Очистка директив include. Используйте раскрывающиеся списки, чтобы настроить, как вы хотите получать уведомления о возможности выделения неиспользуемых директив #include, директив #include, которые можно оптимизировать (удалив их после прямого добавления необходимых транзитивных включений), и отсутствующих директив #include, которые включаются транзитивно.

Снимок экрана: диалоговое окно

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

Значение параметров:

Приглушённый

Очистка директив include показывает неиспользуемые заголовки, приглушая строку неиспользуемого заголовочного файла в редакторе кода, а также выводя сообщение в окне Error List. В редакторе кода наведите указатель мыши на приглушённый #include, чтобы открыть меню быстрых действий, и выберите Показать возможные исправления или щёлкните раскрывающийся список у значка лампочки, чтобы увидеть действия, связанные с неиспользуемым файлом.

Снимок экрана с приглушённой строкой #include < iostream >.

Строка с `#include ` отображается бледным цветом, потому что строка кода, в которой используется `iostream`, закомментирована. Эта строка кода: `// std::cout << "charSize = " << charSize;`. Меню быстрого действия также отображается для этой строки. Он говорит, что "#include " не используется в этом файле и имеет ссылку на **Показать потенциальные исправления**.

Нет: не предпринять никаких действий. Функция Include Cleanup по-прежнему предоставляет доступ к действиям, которые можно выполнить в редакторе кода через меню быстрых действий: наведите указатель мыши на элемент #include или поместите курсор на строку #include и нажмите Ctrl+точка:

Предложение, предупреждение, ошибка: Include Cleanup может отображать сообщения Include Cleanup как предложения, предупреждения или ошибки в окне «Список ошибок». Вы определяете, какой из них. На следующем снимке экрана списка ошибок функция Include Cleanup настроена так, чтобы отображать неиспользуемые заголовки как предупреждения. Убедитесь, что в раскрывающемся списке фильтра выбран пункт Build + IntelliSense, чтобы можно было увидеть выходные данные Include Cleanup:

Снимок экрана: окно списка ошибок.

Для раскрывающегося фильтра установлено значение **Build + IntelliSense**. Предупреждение видно: VCIC002 - "#include " не используется в этом файле".

Другие параметры конфигурации

Дополнительные параметры очистки включаются в разделе "Параметрытекстового редактора>инструментов>>" C/C++>Code Cleanup:

  • Сортировка включает: директивы flags #include , требующие сортировки. Выберите уровень уведомлений о серьезности сообщения, которое отображается в окне списка ошибок : нет (функция отключена), предложение, предупреждение или ошибка.
  • Стиль: Определяет, как сортируются #include инструкции. Выберите Игнорировать, чтобы сортировать без учета стиля скобок, Кавычки, чтобы размещать `#include` в кавычках выше `#include` в угловых скобках, или Угловые скобки, чтобы размещать `#include` в угловых скобках выше `#include` в кавычках.
  • С учетом регистра: Если этот параметр включен, при сортировке имена файлов сравниваются с учетом регистра. Когда флажок снят, сортировка выполняется без учёта регистра.

Снимок экрана параметров Visual Studio с выделенными настройками «Расширенная фильтрация», «Сортировать после изменений», «Сортировать директивы include», «Приоритет сортировки», «Стиль» и «С учетом регистра».

Дополнительные параметры очистки директив include доступны в разделе Сервис>Параметры>Все параметры>Языки>C/C++>Очистка кода>Очистка директив include:

  • Расширенная фильтрация. Если вы вызываете функцию-член для объекта производного класса, но функция определена в базовом классе, средство не предлагает добавить заголовок базового класса. Включите этот параметр, чтобы уменьшить количество лишних подсказок, когда используемые вами символы берутся из базовых классов, а не из типа, к которому вы обращаетесь напрямую.
  • Сортировать директивы #include после любых изменений при очистке include: если этот параметр выбран, встроенная функция сортировки include запускается после выполнения любой операции очистки include.
  • Форматировать директивы #include после внесения изменений при очистке include-директив: Если этот параметр выбран, команда форматирования выполняется после любой операции очистки include-директив.

Снимок экрана: Visual Studio Включить параметры очистки с выделенными параметрами расширенной фильтрации, сортировки и форматирования.

Настройте Include Cleanup с помощью .editorconfig

Функция очистки директив include предлагает дополнительные возможности, например исключение указанных директив include из рекомендаций по очистке, а также указание, что некоторые файлы заголовков являются обязательными, чтобы инструмент не помечал их как неиспользуемые. Определите эти параметры в .editorconfig файле. Добавьте этот файл в проект, чтобы обеспечить согласованные стили программирования для всех, кто работает в базе кода. Дополнительные сведения о добавлении файла в проект см. в статье "Создание переносимых .editorconfig пользовательских параметров редактора" с помощью EditorConfig.

Параметры .editorconfig, которые можно использовать при очистке включаемых файлов:

Настройка Значения Пример
cpp_include_cleanup_add_missing_error_tag_type

Задает уровень ошибки для добавления транзитивных сообщений.
none
suggestion
warning
error
cpp_include_cleanup_add_missing_error_tag_type = suggestion
cpp_include_cleanup_alternate_files

Супрессия сообщений для непрямых включений. Например, если вы #include <windows.h> и используете только содержимое из косвенно включённых через него заголовков winerror.h или minwindef.h, инструмент не предлагает добавлять их.
file1:file2[:file3...][,file4:file5...] cpp_include_cleanup_alternate_files = windows.h:winerror.h:minwindef.h
Или
cpp_include_cleanup_alternate_files = windows.h:winerror.h:minwindef.h,umbrella.h:internal.h
cpp_include_cleanup_excluded_files

Исключает указанные файлы из сообщений Include Cleanup. Вы не получите предложение, связанное с заголовком, независимо от того, следует ли добавить его или что оно не используется.
filename cpp_include_cleanup_excluded_files = vcruntime.h, vcruntime_string.h
cpp_include_cleanup_remove_unused_error_tag_type

Задает уровень ошибки для удаления неиспользуемых сообщений.
none
suggestion
warning
error
dimmed
cpp_include_cleanup_remove_unused_error_tag_type = dimmed
cpp_include_cleanup_replacement_files

Заменяет file1 на file2 при обработке очистки включаемых файлов. Например, вы можете предпочесть использовать cstdio вместо stdio.h. Если у вас есть файл, который содержит и #include <cstdio>, и #include <stdio.h>, и вы используете содержимое только из stdio.h, то при этой настройке Include Cleanup предложит вам удалить stdio.h, поскольку в процессе обработки она заменила использование cstdio на stdio.h. Если вы не используете содержимое ни из одного из них, Include Cleanup предложит удалить оба.
file1:file2 cpp_include_cleanup_replacement_files = stdio.h:cstdio,stdint.h:cstdint
cpp_include_cleanup_required_files

Укажите, что для использования file1 требуется файл2. Например, укажите, что если вы используете atlwin.h это altbase.h также должно быть включено.
file1:file2 cpp_include_cleanup_required_files = atlwin.h:altbase.h, atlcom.h:altbase.h
cpp_sort_includes_error_tag_type

Задает уровень ошибок для сообщений sort-includes. none отключает функцию. suggestion отображает волнистую ... линию и добавляет сообщение в список ошибок. warning отображает зелёную волнистую линию и выводит предупреждение. error отображает красную волнистую линию и добавляет ошибку.
none
suggestion
warning
error
cpp_sort_includes_error_tag_type = suggestion
cpp_sort_includes_priority_case_sensitive

Когда true, при сортировке сравнение имён файлов выполняется с учётом регистра. Если false, сортировка не учитывает регистр.
true
false
cpp_sort_includes_priority_case_sensitive = false
cpp_sort_includes_priority_style

Определяет, учитывается ли стиль скобок при сортировке. ignore сортируется без учета квадратных скобок. quoted сортирует директивы include в кавычках выше директив include в угловых скобках. angle_brackets Сортирует директивы include в угловых скобках перед директивами include в кавычках.
ignore
quoted
angle_brackets
cpp_sort_includes_priority_style = quoted

Следующие параметры доступны начиная с Visual Studio 2026 г.

Настройка Значения Пример
cpp_include_cleanup_format_after_edits

Когда true, выполняет команду форматирования после любого действия «Включить очистку». Полезно, если у вас clang-format настроен для сортировки директив #include.
true
false
cpp_include_cleanup_format_after_edits = true
cpp_include_cleanup_sort_after_edits

При trueвыполнении встроенной функции сортировки после любого действия "Включить очистку". Полезно, если вы не используете clang-format для сортировки #include директив.
true
false
cpp_include_cleanup_sort_after_edits = true

Подавление неиспользуемых сообщений с помощью кода

Начиная с Visual Studio 2026, можно подавить сообщения Include Cleanup для отдельной директивы #include, добавив комментарий // VCIC-Excluded в той же строке. Средство очистки директив include не предлагает удалить эту директиву include, даже если кажется, что она не используется. Предоставьте необязательный текст обоснования после маркера, чтобы будущие читатели знали, почему включено:

#include "Header2.h" // VCIC-Excluded: needed for the ATL macros used below

Вы также можете использовать меню с лампочкой, чтобы добавить комментарий // VCIC-Excluded к директиве #include. Убедитесь, что параметр Include Cleanup включён через Инструменты>Параметры>Все параметры>Языки>C/C++>Очистка кода>Include Cleanup, так как этот параметр по умолчанию отключён. Затем наведите указатель мыши на строку #include, выберите Другие исправления>Подавить VCIC002 в исходном коде::

Снимок экрана: меню лампочки в Visual Studio с пунктом

Комментарий // VCIC-Excluded применяется только к #include файлу. Указание cpp_include_cleanup_excluded_files в .editorconfig применяет это исключение ко всем файлам, на которые распространяется действие .editorconfig.

См. также

Обзор очистки в C/C++
Включить сообщения очистки