Параметры компилятора, упорядоченные по категориям

Эта статья содержит сортированный по категориям список параметров компилятора. Список в алфавитном порядке см. в разделе "Параметры компилятора", перечисленные в алфавитном порядке.

Optimization

Вариант Цель
/favor:<blend|AMD64|INTEL64|ATOM> Создает код, который оптимизирован для конкретной архитектуры или диапазона архитектур.
/O1 Уменьшает размер кода.
/O2 Создает быстрый код.
/Ob<n> Управляет подстановкой подставляемых функций.
/Od Отключает оптимизацию.
/Og Устарело. Использует глобальную оптимизацию.
/Oi[-] Создает встроенные функции.
/Os Отдает приоритет уменьшению размера кода.
/Ot Отдает приоритет быстрому коду.
/Ox Подмножество /O2, которое не включает /GF или /Gy.
/Oy Пропускает указатель на фрейм. (только x86)

Создание кода

Вариант Цель
/arch:<IA32|SSE|SSE2|AVX|AVX2|AVX512> Минимальные требования к архитектуре ЦП. Только IA32, SSE и SSE2 являются x86.
/clr Создает выходной файл, предназначенный для выполнения в среде CLR.
/clr:implicitKeepAlive- Отключение неявного выброса System::GC::KeepAlive(this).
/clr:initialAppDomain Включите начальное поведение ПриложенияDomain Visual C++ 2002.
/clr:netcore Создание сборок, предназначенных для среды выполнения .NET Core.
/clr:noAssembly Не создайте сборку.
/clr:nostdimport Не импортируйте неявно необходимые сборки.
/clr:nostdlib Игнорируйте каталог system .NET Framework при поиске сборок.
/clr:pure Создайте выходной файл только для IL (без собственного исполняемого кода).
/clr:safe Создайте только проверяемый выходной файл, доступный только для IL.
/EHa Включите обработку исключений C++ (с исключениями SEH).
/EHc extern "C" по умолчанию использует nothrow.
/EHr Всегда создавайте noexcept проверка завершения среды выполнения.
/EHs Включите обработку исключений C++ (без исключений SEH).
/fp:contract При создании кода рекомендуется учитывать контракты с плавающей запятой.
/fp:except[-] При создании кода следует учитывать исключения с плавающей запятой.
/fp:fast "быстрая" модель с плавающей запятой; результаты менее предсказуемы.
/fp:precise "точную" модель с плавающей запятой; результаты предсказуемы.
/fp:strict "строгая" модель с плавающей запятой (подразумевает /fp:except).
/fpcvt:BC Обратная совместимость с плавающей запятой для преобразования целочисленных чисел без знака.
/fpcvt:IA Intel native floating-point to unsigned integer conversion behavior.
/fsanitize Включает компиляцию инструментирования санитизатора, например AddressSanitizer.
/fsanitize-coverage Включает компиляцию инструментирования покрытия кода для библиотек, таких как LibFuzzer.
/GA Выполняет оптимизацию для приложений Windows.
/Gd Использует соглашение о вызовах __cdecl . (только x86)
/Ge Устарело. Включает стековые зонды.
/GF Включает объединение строк.
/Gh Вызывает функцию-обработчик _penter.
/GH Вызывает функцию-обработчик _pexit.
/GL[-] Включает оптимизацию всей программы.
/Gm[-] Устарело. Включает минимальное перепостроение.
/Gr Использует соглашение о вызовах __fastcall . (только x86)
/GR[-] Включает информацию о типах во время выполнения (RTTI).
/GS[-] Проверяет безопасность буфера.
/Gs[n] Управляет стековыми зондами.
/GT Поддерживает безопасность волокон для данных, размещаемых с помощью статической локальной памяти потока.
/Gu[-] Убедитесь, что разные функции имеют разные адреса.
/guard:cf[-] Добавление проверок безопасности для защиты потока управления.
/guard:ehcont[-] Включает метаданные продолжения EH.
/Gv Использует соглашение о вызовах __vectorcall . (только x86 и x64)
/Gw[-] Включает глобальную оптимизацию данных всей программы.
/GX[-] Устарело. Включает синхронную обработку исключений. Вместо этого используйте /EH.
/Gy[-] Включает компоновку на уровне функций.
/Gz Использует соглашение о вызовах __stdcall . (только x86)
/GZ Устарело. Включает быстрые проверки. (То же, что /RTC1и )
/homeparams Принудительная запись параметров, переданных в регистрах, в соответствующие места в стеке при вхождении в функцию. Этот параметр компилятора предназначен только для компиляторов x64 (собственный и кросс-компиляция).
/hotpatch Создает образ, допускающий горячее обновление.
/jumptablerdata Поместите таблицы инструкции .rdata switch case jump в раздел.
/Qfast_transcendentals Создает быстрые трансцендентные функции.
/QIfist Устарело. Подавляет вызов вспомогательной функции _ftol при необходимости преобразования из типа с плавающей запятой в целочисленный тип. (только x86)
/Qimprecise_fwaits Удаляет команды fwait внутри блоков try .
/QIntel-jcc-erratum Снижает влияние на производительность обновления микрокода Intel JCC erratum.
/Qpar Включает автоматическую параллелизацию циклов.
/Qpar-report:n Включает уровни отчетов для автоматической параллелизации.
/Qsafe_fp_loads Использует целочисленные инструкции перемещения значений с плавающей запятой и отключает определенные оптимизации загрузки значений с плавающей запятой.
/Qspectre[-] Включите способы устранения рисков для CVE 2017-5753 для класса атак Spectre.
/Qspectre-load Создайте инструкции сериализации для каждой инструкции загрузки.
/Qspectre-load-cf Создайте инструкции сериализации для каждой инструкции потока управления, загружающей память.
/Qvec-report:n Включает уровни отчетов для автоматической векторизации.
/RTC1 Включите быстрые проверка среды выполнения (эквивалентно/RTCsu).
/RTCc Преобразование в небольшие проверка типа во время выполнения.
/RTCs Включите проверка среды выполнения кадров стека.
/RTCu Включает неинициализированные локальные проверка.
/volatile:iso Семантика получения и выпуска не гарантируется при переменных доступах.
/volatile:ms Семантика получения и выпуска гарантируется при переменных доступах.

выходные файлы

Вариант Цель
/doc Обрабатывает комментарии к документации в XML-файл.
/FA Настраивает файл списка сборки.
/Fa Создает файл списка сборки.
/Fd Переименовывает файл базы данных программы.
/Fe Переименовывает исполняемый файл.
/Fi Задает предобработанное имя выходного файла.
/Fm Создает файл сопоставления.
/Fo Создает объектный файл.
/Fp Задает имя файла предкомпилированного заголовка.
/FR, /Fr Имена созданных .sbr файлов браузера. /Fr не рекомендуется к использованию.
/Ft<dir> Расположение файлов заголовков, созданных для #import.

Препроцессор

Вариант Цель
/AI<dir> Указывает каталог для поиска для разрешения ссылок на файлы, переданные директиве #using .
/C Сохраняет комментарии на этапе предварительной обработки.
/D<name>{=|#}<text> Определяет константы и макросы.
/E Копирует выходные данные препроцессора в стандартный вывод.
/EP Копирует выходные данные препроцессора в стандартный вывод.
/FI<file> Выполняет предварительную обработку указанного включаемого файла.
/FU<file> Принудительно использует имя файла, как если бы оно было передано директиве #using .
/Fx Выполняет слияние введенного кода с исходным файлом.
/I<dir> Осуществляет поиск включаемых файлов в каталоге.
/P Записывает выходные данные препроцессора в файл.
/PD Печать всех определений макросов.
/PH Создает #pragma file_hash при предварительной обработке.
/U<name> Удаляет предварительно определенный макрос.
/u Удаляет все предварительно определенные макросы.
/X Пропускает стандартный каталог включаемых файлов.

Единицы заголовка и модули

Вариант Цель
/exportHeader Создайте файлы единиц заголовка (.ifc), указанные входными аргументами.
/headerUnit Укажите, где найти файл единицы заголовка (.ifc) для указанного заголовка.
/headerName Создайте единицу заголовка из указанного заголовка.
/ifcOutput Укажите имя выходного файла или каталог для встроенных .ifc файлов.
/interface Обрабатывает входной файл как единицу интерфейса модуля.
/internalPartition Обрабатывайте входной файл как внутреннюю единицу секции.
/reference Используйте именованный модуль IFC.
/scanDependencies Перечисление зависимостей модуля и блока заголовков в формате JSON c++ standard.
/sourceDependencies Список всех зависимостей на уровне источника.
/sourceDependencies:directives Перечисление зависимостей модуля и блока заголовка.
/translateInclude Рассматривать #include как import.

Язык

Вариант Цель
/await Включите расширения соподобий (возобновление функций).
/await:strict Включите стандартную поддержку coroutine C++20 с более ранними версиями языка.
/constexpr:backtrace<N> constexpr Отображение N-вычислений в диагностика (по умолчанию: 10).
/constexpr:depth<N> Ограничение глубины рекурсии для constexpr оценки (по умолчанию: 512).
/constexpr:steps<N> Завершение constexpr оценки после N шагов (по умолчанию: 100000)
/openmp Включается в исходном #pragma omp коде.
/openmp:experimental Включите расширения языка OpenMP 2.0 и выберите расширения языка OpenMP 3.0+ .
/openmp:llvm Расширения языка OpenMP с помощью среды выполнения LLVM.
/permissive[-] Задайте стандартный режим соответствия.
/std:c++14 C++14 standard ISO/IEC 14882:2014 (по умолчанию).
/std:c++17 C++17 standard ISO/IEC 14882:2017.
/std:c++20 C++20 standard ISO/IEC 14882:2020.
/std:c++latest Последние предварительные версии черновика C++ стандартных функций.
/std:c11 Стандарт C11 ISO/IEC 9899:2011.
/std:c17 C17 standard ISO/IEC 9899:2018.
/std:clatest Последние стандартные функции предварительной версии C.
/vd{0|1|2} Подавляет или включает скрытые члены класса vtordisp .
/vmb Использует оптимальное основание для указателей на члены.
/vmg Использует полное обобщение для указателей на члены.
/vmm Объявляет множественное наследование.
/vms Объявляет одиночное наследование.
/vmv Объявляет виртуальное наследование.
/Z7 Создает сведения о отладке, совместимые с C 7.0.
/Za Отключает некоторые расширения языка C89 в коде C.
/Zc:__cplusplus[-] __cplusplus Включите макрос, чтобы сообщить о поддерживаемом стандарте (отключен по умолчанию).
/Zc:__STDC__ __STDC__ Включить макрос для отчета о стандарте C поддерживается (отключено по умолчанию).
/Zc:alignedNew[-] Включите динамическое выделение C++17 (по умолчанию в C++17).
/Zc:auto[-] Принудительно примените новое значение auto C++ (по умолчанию).
/Zc:char8_t[-] Включите или отключите поддержку const char8_t собственного u8 литерала C++20 (по умолчанию, за исключением случаев, если они не поддерживаются/std:c++20).
/Zc:enumTypes[-] Включите стандартные правила C++ для выводимых enum базовых типов (отключено от y по умолчанию, а не подразумевается /permissive-).
/Zc:externC[-] Применение стандартных правил C++ для extern "C" функций (подразумеваемых /permissive-).
/Zc:externConstexpr[-] Включите внешнюю компоновку для constexpr переменных (отключено по умолчанию).
/Zc:forScope[-] Применение стандартных правил области C++ for (по умолчанию).
/Zc:gotoScope Применение стандартных правил C++ goto вокруг инициализации локальных переменных (подразумеваемых /permissive-).
/Zc:hiddenFriend[-] Принудительное применение правил скрытых друзей C++ (подразумеваемых /permissive-)
/Zc:implicitNoexcept[-] Включите неявные noexcept функции для обязательных функций (по умолчанию).
/Zc:inline[-] Удалите функции или данные без ссылок, если они COMDAT или имеют только внутреннюю компоновку (отключено по умолчанию).
/Zc:lambda[-] Включите новый лямбда-процессор для синтактических проверка режима соответствия в универсальных лямбда-файлах.
/Zc:noexceptTypes[-] Применение правил C++17 noexcept (по умолчанию в C++17 или более поздней версии).
/Zc:nrvo[-] Включение необязательных копий и перемещение элизионов (по умолчанию /O2/permissive-/std:c++20 или более поздних версий).
/Zc:preprocessor[-] Используйте новый препроцессор соответствия (отключено по умолчанию, за исключением C11/C17).
/Zc:referenceBinding[-] Временная функция UDT не привязывается к ссылке lvalue, отличной от const (по умолчанию).
/Zc:rvalueCast[-] Принудительное применение правил явного преобразования типов C++ (отключено по умолчанию).
/Zc:sizedDealloc[-] Включите функции размещения сделки глобального размера C++14 (по умолчанию).
/Zc:strictStrings[-] Отключите строковый литерал в char* или wchar_t* преобразование (отключено по умолчанию).
/Zc:templateScope[-] Применение стандартных правил тени параметров шаблона C++ (отключено по умолчанию).
/Zc:ternary[-] Принудительное применение правил условного оператора для типов операнда (отключено по умолчанию).
/Zc:threadSafeInit[-] Включите локальную статическую инициализацию в потокобезопасном режиме (по умолчанию).
/Zc:throwingNew[-] Предположим, что возникает сбой operator new (по умолчанию отключен).
/Zc:tlsGuards[-] Создайте проверка среды выполнения для инициализации переменных TLS (по умолчанию).
/Zc:trigraphs Включите триграфы (устаревшие, отключенные по умолчанию).
/Zc:twoPhase[-] Используйте несоответствующее поведение синтаксического анализа шаблона (соответствующее по умолчанию).
/Zc:wchar_t[-] wchar_t является собственным типом, а не типом (по умолчанию).
/Zc:zeroSizeArrayNew[-] Вызов элемента new/delete для массивов объектов размером 0 (по умолчанию).
/Ze Устарело. Включает расширения языка C89.
/Zf Улучшает время создания PDB в параллельных сборках.
/ZH:[MD5|SHA1|SHA_256] Указывает MD5, SHA-1 или SHA-256 для проверка sumsums in debug info.
/ZI Включает отладочную информацию в базу данных программы, совместимую с функцией "Изменить и продолжить". (только x86)
/Zi Создает полную отладочную информацию.
/Zl Удаляет имя библиотеки по умолчанию из .obj файла.
/Zo[-] Создайте более подробные сведения об отладке для оптимизированного кода.
/Zp[n] Упаковывает члены структур.
/Zs Проверяет только синтаксис.
/ZW Создает выходной файл для запуска в среда выполнения Windows.

Связывание

Вариант Цель
/F Задает размер стека.
/LD Создает библиотеку динамической компоновки.
/LDd Создает отладочную библиотеку динамической компоновки.
/link Передает указанный параметр в программу LINK.
/LN Создает MSIL .netmodule.
/MD Компилируется для создания многопоточной библиотеки DLL с помощью MSVCRT.lib.
/MDd Компилируется для создания многопоточной библиотеки DLL отладки с помощью MSVCRTD.lib.
/MT Компилируется для создания многопоточного исполняемого файла с помощью LIBCMT.lib.
/MTd Компилируется для создания многопоточного исполняемого файла отладки с помощью LIBCMTD.lib.

Разное

Вариант Цель
/? Отображает список параметров компилятора.
@ Указывает файл ответа.
/analyze Включает анализ кода
/bigobj Увеличивает число адресуемых секций в OBJ-файле.
/c Задает компиляцию без компоновки.
/cgthreads Указывает количество потоков cl.exe, используемых для оптимизации и создания кода.
/errorReport Устарело. параметры отчеты об ошибках Windows (WER) управляют отчетом об ошибках.
/execution-charset Задайте набор символов выполнения.
/fastfail Включите режим быстрого сбоя.
/FC Отображает полный путь к файлам исходного кода, переданным в cl.exe в диагностическом тексте.
/FS Принудительно выполняет сериализацию в PDB-файл с помощью MSPDBSRV.EXE.
/H Устарело. Ограничивает длину внешних (открытых) имен.
/HELP Отображает список параметров компилятора.
/J Изменяет тип char по умолчанию.
/JMC Поддерживает отладку собственного кода C++ .
/kernel Компилятор и компоновщик создают двоичный файл, который можно выполнить в ядре Windows.
/MP Параллельное построение нескольких исходных файлов.
/nologo Подавление отображения приветствия.
/presetPadding Ноль инициализировать заполнение для типов классов на основе стека.
/showIncludes Отображает список всех включаемых файлов во время компиляции.
/source-charset Задайте исходный набор символов.
/Tc Указывает исходный файл на языке C.
/TC Указывает, что все исходные файлы — C.
/Tp Указывает исходный файл на языке C++.
/TP Указывает, что все исходные файлы — C++.
/utf-8 Задайте для наборов исходных и выполняемых символов значение UTF-8.
/V Устарело. Задает строку версии.
/validate-charset Проверьте файлы UTF-8 только для совместимых символов.
/volatileMetadata Создайте метаданные при доступе к переменной памяти.
/Yc Создайте .PCH файл.
/Yd Устарело. Размещает полную отладочную информацию во всех объектных файлах. Вместо этого используйте /Zi.
/Yl Вставляет ссылку PCH при создании отладочной библиотеки.
/Yu Использует файл предкомпилированного заголовка при построении.
/Y- Пропускает все прочие параметры компилятора, относящиеся к предварительно скомпилированным заголовкам, в текущем построении.
/Zm Указывает предел выделения памяти для предкомпилированного заголовка.

Диагностика

Вариант Цель
/diagnostics:caret[-] Формат диагностики: выводит столбец и указанную строку источника.
/diagnostics:classic Используйте устаревший формат диагностика.
/diagnostics Формат диагностики: выводит сведения о столбцах.
/external:anglebrackets Обрабатывать все заголовки, включенные как <> внешние.
/external:env:<var> Укажите переменную среды с расположениями внешних заголовков.
/external:I <path> Укажите расположение внешних заголовков.
/external:templates[-] Оцените уровень предупреждений в цепочке создания экземпляров шаблона.
/external:W<n> Задайте уровень предупреждения для внешних заголовков.
/options:strict Нераспознанные параметры компилятора являются ошибками.
/sdl Включите дополнительные функции безопасности и предупреждения.
/w Отключите все предупреждения.
/W0, /W1, /W2, /W3, /W4 Задайте уровень предупреждения выходных данных.
/w1<n>, /w2<n>, /w3<n>, /w4<n> Задайте уровень предупреждения для указанного предупреждения.
/Wall Включите все предупреждения, включая предупреждения, отключенные по умолчанию.
/wd<n> Отключите указанное предупреждение.
/we<n> Обработайте указанное предупреждение как ошибку.
/WL Включите однострочный диагностика для сообщений об ошибках и предупреждениях при компиляции исходного кода C++ из командной строки.
/wo<n> Отображение указанного предупреждения только один раз.
/Wv:xx[.yy[.zzzzz]] Отключите предупреждения, появившиеся после указанной версии компилятора.
/WX Обработайте предупреждения как ошибки.

Экспериментальные варианты

Экспериментальные параметры могут поддерживаться только определенными версиями компилятора. Они также могут вести себя по-разному в разных версиях компилятора. Часто лучше всего или только документация по экспериментальным вариантам находится в блоге команды Microsoft C++ .

Вариант Цель
/experimental:log Включает экспериментальные структурированные выходные данные SARIF.
/experimental:module Включает поддержку экспериментального модуля.

Устаревшие и удаленные параметры компилятора

Вариант Цель
/clr:noAssembly Устарело. Вместо этого используйте /LN (создать модуль MSIL).
/errorReport Устарело. Отчеты об ошибках управляются параметрами отчеты об ошибках Windows (WER).
/experimental:preprocessor Устарело. Включает экспериментальную поддержку препроцессора. Использование /Zc:preprocessor
/Fr Устарело. Создает файл информации об исходном коде без локальных переменных.
/Ge Устарело. Включает стековые зонды. Включено по умолчанию.
/Gm Устарело. Включает минимальное перепостроение.
/GX Устарело. Включает синхронную обработку исключений. Вместо этого используйте /EH.
/GZ Устарело. Включает быстрые проверки. Вместо этого используйте /RTC1.
/H Устарело. Ограничивает длину внешних (открытых) имен.
/Og Устарело. Использует глобальную оптимизацию.
/QIfist Устарело. Используется один раз для указания способа преобразования типа с плавающей запятой в целочисленный тип.
/V Устарело. .obj Задает строку версии файла.
/Wp64 Является устаревшей. Выявляет проблемы 64-битной переносимости.
/Yd Устарело. Размещает полную отладочную информацию во всех объектных файлах. Вместо этого используйте /Zi.
/Zc:forScope- Устарело. Отключает согласование видимости переменных, объявленных в заголовке оператора for.
/Ze Устарело. Включает расширения языка .
/Zg Удалено в Visual Studio 2015. Создает прототипы функций.

См. также

Справочные сведения о сборке C/C++
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC