Opcje kompilatora w rozbiciu na kategorie

Ten artykuł zawiera listę kategorii opcji kompilatora. Aby uzyskać listę alfabetyczną, zobacz Opcje kompilatora wymienione alfabetycznie.

Optymalizacja

Opcja Przeznaczenie
/favor:<blend|AMD64|INTEL64|ATOM> Tworzy kod zoptymalizowany pod kątem określonej architektury lub dla wielu architektur.
/O1 Tworzy mały kod.
/O2 Tworzy szybki kod.
/Ob<n> Steruje rozszerzaniem wbudowanym.
/Od Wyłącza optymalizację.
/Og Przestarzałe. Używa optymalizacji globalnych.
/Oi[-] Generuje funkcje wewnętrzne.
/Os Faworyzuje mały kod.
/Ot Faworyzuje szybki kod.
/Ox Podzestaw /O2, który nie zawiera /GF lub /Gy.
/Oy Pomija wskaźnik ramki. (tylko x86)

Generowanie kodu

Opcja Przeznaczenie
/arch:<IA32|SSE|SSE2|AVX|AVX2|AVX512> Minimalne wymagania dotyczące architektury procesora CPU. IA32, SSE i SSE2 są tylko x86.
/clr Tworzy plik wyjściowy do uruchomienia w środowisku uruchomieniowym języka wspólnego.
/clr:implicitKeepAlive- Wyłącz niejawną emisję .System::GC::KeepAlive(this)
/clr:initialAppDomain Włącz początkowe zachowanie elementu AppDomain programu Visual C++ 2002.
/clr:netcore Tworzenie zestawów przeznaczonych dla środowiska uruchomieniowego platformy .NET Core.
/clr:noAssembly Nie twórz zestawu.
/clr:nostdimport Nie importuj żadnych wymaganych zestawów niejawnie.
/clr:nostdlib Ignoruj katalog systemowy .NET Framework podczas wyszukiwania zestawów.
/clr:pure Utwórz plik wyjściowy tylko w języku IL (bez natywnego kodu wykonywalnego).
/clr:safe Tworzenie pliku wyjściowego z możliwością weryfikacji tylko w języku IL.
/EHa Włącz obsługę wyjątków języka C++ (z wyjątkami SEH).
/EHc extern "C" wartość domyślna to nothrow.
/EHr Zawsze generuj noexcept kontrole zakończenia działania.
/EHs Włącz obsługę wyjątków języka C++ (bez wyjątków SEH).
/fp:contract Podczas generowania kodu rozważ skurcze zmiennoprzecinkowe.
/fp:except[-] Podczas generowania kodu rozważ wyjątki zmiennoprzecinkowe.
/fp:fast "szybki" model zmiennoprzecinkowa; wyniki są mniej przewidywalne.
/fp:precise "precyzyjny" model zmiennoprzecinkowa; wyniki są przewidywalne.
/fp:strict "strict" model zmiennoprzecinkowa (implikuje /fp:except).
/fpcvt:BC Konwersje liczb zmiennoprzecinkowych zgodne z poprzednimi wersjami na niepodpisane liczby całkowite.
/fpcvt:IA Natywne zachowanie konwersji liczby zmiennoprzecinkowe intel na niepodpisane liczby całkowite.
/fsanitize Umożliwia kompilację instrumentacji sanitizer, takiej jak AddressSanitizer.
/fsanitize-coverage Umożliwia kompilację instrumentacji pokrycia kodu dla bibliotek, takich jak LibFuzzer.
/GA Optymalizuje pod kątem aplikacji Windows.
/Gd __cdecl Używa konwencji wywoływania. (tylko x86)
/Ge Przestarzałe. Aktywuje sondy stosu.
/GF Włącza buforowanie ciągów.
/Gh Wywołuje funkcję _penterhaka .
/GH Wywołuje funkcję _pexithaka .
/GL[-] Umożliwia optymalizację całego programu.
/Gm[-] Przestarzałe. Umożliwia minimalną ponowną kompilację.
/Gr __fastcall Używa konwencji wywoływania. (tylko x86)
/GR[-] Włącza informacje o typie czasu wykonywania (RTTI).
/GS[-] Sprawdza zabezpieczenia buforu.
/Gs[n] Steruje sondami stosu.
/GT Obsługuje bezpieczeństwo światłowodów dla danych przydzielonych przy użyciu magazynu statycznego wątku lokalnego.
/Gu[-] Upewnij się, że różne funkcje mają różne adresy.
/guard:cf[-] Dodaje kontrole zabezpieczeń ochrony przepływu sterowania.
/guard:ehcont[-] Włącza metadane kontynuacji EH.
/Gv __vectorcall Używa konwencji wywoływania. (tylko x86 i x64)
/Gw[-] Umożliwia optymalizację danych globalnych w całym programie.
/GX[-] Przestarzałe. Umożliwia synchroniczną obsługę wyjątków. Zamiast tego użyj polecenia cmdlet /EH.
/Gy[-] Umożliwia łączenie na poziomie funkcji.
/Gz __stdcall Używa konwencji wywoływania. (tylko x86)
/GZ Przestarzałe. Umożliwia szybkie sprawdzanie. (Taki sam jak /RTC1)
/homeparams Wymusza zapisanie parametrów przekazywanych w rejestrach do ich lokalizacji na stosie po wpisie funkcji. Ta opcja kompilatora dotyczy tylko kompilatorów x64 (kompilatora natywnego i krzyżowego).
/hotpatch Tworzy obraz możliwy do poprawiania.
/Qfast_transcendentals Generujeszybkiee.
/QIfist Przestarzałe. Pomija wywołanie funkcji _ftol pomocniczej, gdy wymagana jest konwersja typu zmiennoprzecinkowego na typ całkowity. (tylko x86)
/Qimprecise_fwaits fwait Usuwa polecenia wewnątrz try bloków.
/QIntel-jcc-erratum Zmniejsza wpływ aktualizacji mikrokodu intel JCC erratum na wydajność.
/Qpar Umożliwia automatyczną równoległość pętli.
/Qpar-report:n Włącza poziomy raportowania na potrzeby automatycznego przetwarzania równoległego.
/Qsafe_fp_loads Używa instrukcji przenoszenia liczb całkowitych dla wartości zmiennoprzecinkowych i wyłącza pewne optymalizacje obciążenia zmiennoprzecinkowego.
/Qspectre[-] Włącz środki zaradcze dla cve 2017-5753 dla klasy ataków Spectre.
/Qspectre-load Generowanie instrukcji serializacji dla każdej instrukcji ładowania.
/Qspectre-load-cf Generowanie instrukcji serializacji dla każdej instrukcji przepływu sterowania, która ładuje pamięć.
/Qvec-report:n Umożliwia raportowanie poziomów automatycznej wektoryzacji.
/RTC1 Włącz szybkie kontrole środowiska uruchomieniowego (równoważne )./RTCsu
/RTCc Przekonwertuj na kontrole mniejszego typu w czasie wykonywania.
/RTCs Włącz sprawdzanie środowiska uruchomieniowego ramki stosu.
/RTCu Włącza niezainicjowane kontrole użycia lokalnego.
/volatile:iso Semantyka uzyskiwania/wydawania nie jest gwarantowana w przypadku nietrwałych dostępu.
/volatile:ms Semantyka uzyskiwania/wydawania gwarantowana dla nietrwałych dostępu.

Pliki wyjściowe

Opcja Przeznaczenie
/doc Przetwarza komentarze dokumentacji do pliku XML.
/FA Konfiguruje plik listy zestawów.
/Fa Tworzy plik listy zestawów.
/Fd Zmienia nazwę pliku bazy danych programu.
/Fe Zmienia nazwę pliku wykonywalnego.
/Fi Określa wstępnie przetworzoną nazwę pliku wyjściowego.
/Fm Tworzy plik mapowania.
/Fo Tworzy plik obiektu.
/Fp Określa prekompilowaną nazwę pliku nagłówka.
/FR, /Fr Nazwa wygenerowanych .sbr plików przeglądarki. /Fr jest przestarzały.
/Ft<dir> Lokalizacja plików nagłówków wygenerowanych dla .#import

Preprocesor

Opcja Przeznaczenie
/AI<dir> Określa katalog do wyszukiwania w celu rozpoznania odwołań do plików przekazanych do #using dyrektywy.
/C Zachowuje komentarze podczas przetwarzania wstępnego.
/D<name>{=|#}<text> Definiuje stałe i makra.
/E Kopiuje dane wyjściowe preprocesora do standardowych danych wyjściowych.
/EP Kopiuje dane wyjściowe preprocesora do standardowych danych wyjściowych.
/FI<file> Wstępnie przetwarza określony plik dołączania.
/FU<file> Wymusza użycie nazwy pliku, tak jakby została przekazana #using dyrektywie.
/Fx Scala wstrzyknięty kod z plikiem źródłowym.
/I<dir> Wyszukuje w katalogu pliki dołączane.
/P Zapisuje dane wyjściowe preprocesora do pliku.
/PD Drukuj wszystkie definicje makr.
/PH Generuj #pragma file_hash podczas przetwarzania wstępnego.
/U<name> Usuwa wstępnie zdefiniowane makro.
/u Usuwa wszystkie wstępnie zdefiniowane makra.
/X Ignoruje standardowy katalog dołączania.

Jednostki/moduły nagłówka

Opcja Przeznaczenie
/exportHeader Utwórz pliki jednostek nagłówka (.ifc) określone przez argumenty wejściowe.
/headerUnit Określ miejsce znalezienia pliku jednostki nagłówka (.ifc) dla określonego nagłówka.
/headerName Utwórz jednostkę nagłówka z określonego nagłówka.
/ifcOutput Określ plik wyjściowy lub katalog dla .ifc plików.
/interface Traktuj plik wejściowy jako jednostkę interfejsu modułu.
/internalPartition Traktuj plik wejściowy jako jednostkę partycji wewnętrznej.
/reference Użyj nazwanego modułu IFC.
/scanDependencies Wyświetlanie listy zależności modułu i jednostki nagłówka w formularzu JSON języka C++ w warstwie Standardowa.
/sourceDependencies Wyświetl listę wszystkich zależności na poziomie źródłowym.
/sourceDependencies:directives Wyświetlanie listy zależności modułu i jednostki nagłówka.
/translateInclude Traktuj #include jako import.

Język

Opcja Przeznaczenie
/await Włącz rozszerzenia koroutines (funkcje możliwe do wznowienia).
/await:strict Włącz standardową obsługę koproceducji języka C++20 we wcześniejszych wersjach językowych.
/constexpr:backtrace<N> Pokaż N constexpr ocen w diagnostyce (wartość domyślna: 10).
/constexpr:depth<N> Limit głębokości rekursji dla constexpr oceny (wartość domyślna: 512).
/constexpr:steps<N> Zakończenie constexpr oceny po N krokach (domyślnie: 100000)
/openmp #pragma omp Włącza w kodzie źródłowym.
/openmp:experimental Włącz rozszerzenia języka OpenMP 2.0 oraz wybierz pozycję Rozszerzenia języka OpenMP 3.0+.
/openmp:llvm Rozszerzenia języka OpenMP przy użyciu środowiska uruchomieniowego LLVM.
/permissive[-] Ustaw tryb zgodności ze standardami.
/std:c++14 C++14 standard ISO/IEC 14882:2014 (ustawienie domyślne).
/std:c++17 C++17 standard ISO/IEC 14882:2017.
/std:c++20 C++20 standard ISO/IEC 14882:2020.
/std:c++latest Najnowsze wersje robocze standardowych funkcji języka C++ w wersji zapoznawczej.
/std:c11 C11 standard ISO/IEC 9899:2011.
/std:c17 C17 standard ISO/IEC 9899:2018.
/vd{0|1|2} Pomija lub włącza ukryte vtordisp składowe klasy.
/vmb Używa najlepszej podstawy dla wskaźników do elementów członkowskich.
/vmg Używa pełnej ogólnejlności wskaźników do elementów członkowskich.
/vmm Deklaruje wiele dziedziczenia.
/vms Deklaruje pojedyncze dziedziczenie.
/vmv Deklaruje dziedziczenie wirtualne.
/Z7 Generuje informacje o debugowaniu zgodne z językiem C 7.0.
/Za Wyłącza niektóre rozszerzenia języka C89 w kodzie C.
/Zc:alignedNew[-] Włącz alokację dynamiczną wyrównaną w języku C++17 (domyślnie w języku C++17).
/Zc:auto[-] Wymuś nowe znaczenie auto standardowego języka C++ dla (domyślnie włączone).
/Zc:char8_t[-] Włączanie lub wyłączanie natywnej u8 obsługi literałów języka C++20 jako const char8_t (domyślnie wyłączone, z wyjątkiem opcji /std:c++20).
/Zc:__cplusplus[-] __cplusplus Włącz makro, aby zgłosić obsługiwany standard (domyślnie wyłączony).
/Zc:externC[-] Wymuszanie standardowych reguł języka C++ dla extern "C" funkcji (implikowane przez /permissive-).
/Zc:externConstexpr[-] Włącz połączenie zewnętrzne dla constexpr zmiennych (domyślnie wyłączone).
/Zc:forScope[-] Wymuszanie standardowych reguł określania zakresu języka C++ for (domyślnie włączone).
/Zc:hiddenFriend[-] Wymuszanie standardowych reguł ukrytych znajomych języka C++ (domniemanych przez /permissive-)
/Zc:implicitNoexcept[-] Włącz niejawne noexcept dla wymaganych funkcji (domyślnie włączone).
/Zc:inline[-] Usuń niereferencyjne funkcje lub dane, jeśli są one comDAT lub mają tylko połączenie wewnętrzne (domyślnie wyłączone).
/Zc:lambda[-] Włącz nowy procesor lambda na potrzeby sprawdzania składni trybu zgodności w ogólnych wyrażeniach lambda.
/Zc:noexceptTypes[-] Wymuszanie reguł języka C++17 noexcept (domyślnie w języku C++17 lub nowszym).
/Zc:preprocessor[-] Użyj nowego zgodnego preprocesora (domyślnie wyłączonego z wyjątkiem C11/C17).
/Zc:referenceBinding[-] Funkcja udT tymczasowa nie będzie wiązać się z odwołaniem innej niż const lvalue (domyślnie wyłączona).
/Zc:rvalueCast[-] Wymuszanie standardowych reguł konwersji typów jawnych języka C++ (domyślnie wyłączone).
/Zc:sizedDealloc[-] Włącz funkcje cofania wielkości globalnego języka C++14 (domyślnie włączone).
/Zc:strictStrings[-] Wyłącz literał ciągu do char* lub wchar_t* konwersję (domyślnie wyłączone).
/Zc:ternary[-] Wymuszanie reguł operatorów warunkowych dla typów operandów (domyślnie wyłączone).
/Zc:threadSafeInit[-] Włącz bezpieczną wątkowo lokalną statyczną inicjację (domyślnie włączoną).
/Zc:throwingNew[-] Przyjmij, że operator new jest zgłaszany błąd (domyślnie wyłączony).
/Zc:trigraphs Włącz trygrafy (przestarzałe, domyślnie wyłączone).
/Zc:tlsGuards[-] Generowanie testów środowiska uruchomieniowego pod kątem inicjowania zmiennej TLS (domyślnie).
/Zc:twoPhase[-] Użyj niezgodnego zachowania analizy szablonu (domyślnie zgodnego).
/Zc:wchar_t[-] wchar_t jest typem natywnym, a nie typedef (domyślnie).
/Zc:zeroSizeArrayNew[-] Wywołaj element członkowski new/delete dla tablic o rozmiarze 0 obiektów (domyślnie włączone).
/Ze Przestarzałe. Włącza rozszerzenia języka C89.
/Zf Poprawia czas generowania pliku PDB w kompilacjach równoległych.
/ZH:[MD5|SHA1|SHA_256] Określa md5, SHA-1 lub SHA-256 dla sum kontrolnych w informacjach debugowania.
/ZI Zawiera informacje debugowania w bazie danych programu zgodne z funkcją Edytuj i Kontynuuj. (tylko x86)
/Zi Generuje pełne informacje o debugowaniu.
/Zl Usuwa domyślną nazwę biblioteki z .obj pliku.
/Zo[-] Generowanie bogatszych informacji o debugowaniu dla zoptymalizowanego kodu.
/Zp[n]N Elementy członkowskie struktury pakietów.
/Zs Sprawdza tylko składnię.
/ZW Tworzy plik wyjściowy do uruchomienia na środowisko wykonawcze systemu Windows.

Konsolidacja

Opcja Przeznaczenie
/F Ustawia rozmiar stosu.
/LD Tworzy bibliotekę łącza dynamicznego.
/LDd Tworzy bibliotekę linku dynamicznego debugowania.
/link Przekazuje określoną opcję linku.
/LN Tworzy MSIL .netmodule.
/MD Kompiluje się w celu utworzenia wielowątkowanej biblioteki DLL przy użyciu biblioteki MSVCRT.lib.
/MDd Kompiluje się w celu utworzenia wielowątkowanej biblioteki DLL przy użyciu biblioteki MSVCRTD.lib.
/MT Kompiluje się w celu utworzenia wielowątkowego pliku wykonywalnego przy użyciu biblioteki LIBCMT.lib.
/MTd Kompiluje się w celu utworzenia pliku wykonywalnego wielowątkowego debugowania przy użyciu biblioteki LIBCMTD.lib.

Różne

Opcja Przeznaczenie
/? Wyświetla listę opcji kompilatora.
@ Określa plik odpowiedzi.
/analyze Umożliwia analizę kodu.
/bigobj Zwiększa liczbę sekcji adresowalnych w pliku .obj.
/c Kompiluje się bez łączenia.
/cgthreads Określa liczbę wątkówcl.exe do użycia do optymalizacji i generowania kodu.
/errorReport Przestarzałe. Raportowanie błędów jest kontrolowane przez ustawienia Raportowanie błędów systemu Windows (WER).
/execution-charset Ustaw zestaw znaków wykonywania.
/fastfail Włącz tryb szybkiej awarii.
/FC Wyświetla pełną ścieżkę plików kodu źródłowego przekazanych do cl.exe w tekście diagnostycznym.
/FS Wymusza zapisywanie w pliku PDB do serializacji za pomocą MSPDBSRV.EXE.
/H Przestarzałe. Ogranicza długość nazw zewnętrznych (publicznych).
/HELP Wyświetla listę opcji kompilatora.
/J Zmienia typ domyślny char .
/JMC Obsługuje natywne debugowanie kodu tylko w języku C++.
/kernel Kompilator i konsolidator utworzy plik binarny, który można wykonać w jądrze Windows.
/MP Kompiluje wiele plików źródłowych jednocześnie.
/nologo Pomija wyświetlanie baneru logowania.
/presetPadding Zero inicjuje dopełnianie dla typów klas opartych na stosie.
/showIncludes Wyświetla listę wszystkich plików dołączanych podczas kompilacji.
/source-charset Ustaw zestaw znaków źródłowych.
/Tc Określa plik źródłowy języka C.
/TC Określa wszystkie pliki źródłowe to C.
/Tp Określa plik źródłowy języka C++.
/TP Określa wszystkie pliki źródłowe to C++.
/utf-8 Ustaw zestawy znaków źródłowych i wykonawczych na UTF-8.
/V Przestarzałe. Ustawia ciąg wersji.
/validate-charset Zweryfikuj pliki UTF-8 tylko pod kątem zgodnych znaków.
/volatileMetadata Generowanie metadanych w przypadku dostępu do pamięci nietrwałej.
/Yc Utwórz .PCH plik.
/Yd Przestarzałe. Umieszcza pełne informacje o debugowaniu we wszystkich plikach obiektów. Zamiast tego użyj polecenia cmdlet /Zi.
/Yl Wprowadza odwołanie PCH podczas tworzenia biblioteki debugowania.
/Yu Używa wstępnie skompilowanego pliku nagłówka podczas kompilacji.
/Y- Ignoruje wszystkie inne opcje kompilatora prekompilowanego nagłówka w bieżącej kompilacji.
/Zm Określa wstępnie skompilowany limit alokacji pamięci nagłówka.

Diagnostyka

Opcja Przeznaczenie
/diagnostics:caret[-] Format diagnostyki: drukuje kolumnę i wskazany wiersz źródła.
/diagnostics:classic Użyj starszego formatu diagnostyki.
/diagnostics Format diagnostyki: drukuje informacje o kolumnie.
/external:anglebrackets Traktuj wszystkie nagłówki dołączone za pośrednictwem <> jako zewnętrzne.
/external:env:<var> Określ zmienną środowiskową z lokalizacjami nagłówków zewnętrznych.
/external:I <path> Określ lokalizację nagłówków zewnętrznych.
/external:templates[-] Oceń poziom ostrzeżenia między łańcuchem tworzenia wystąpienia szablonu.
/external:W<n> Ustaw poziom ostrzeżenia dla nagłówków zewnętrznych.
/options:strict Nierozpoznane opcje kompilatora to błędy.
/sdl Włącz więcej funkcji zabezpieczeń i ostrzeżeń.
/w Wyłącz wszystkie ostrzeżenia.
/W0, /W1, /W2, /W3, /W4 Ustaw poziom ostrzeżenia wyjściowego.
/w1<n>, /w2<n>, /w3<n>, /w4<n> Ustaw poziom ostrzeżenia dla określonego ostrzeżenia.
/Wall Włącz wszystkie ostrzeżenia, w tym ostrzeżenia, które są domyślnie wyłączone.
/wd<n> Wyłącz określone ostrzeżenie.
/we<n> Traktuj określone ostrzeżenie jako błąd.
/WL Włącz jednowierszową diagnostykę komunikatów o błędach i ostrzeżeniach podczas kompilowania kodu źródłowego języka C++ z wiersza polecenia.
/wo<n> Wyświetl określone ostrzeżenie tylko raz.
/Wv:xx[.yy[.zzzzz]] Wyłącz ostrzeżenia wprowadzone po określonej wersji kompilatora.
/WX Traktuj ostrzeżenia jako błędy.

Opcje eksperymentalne

Opcje eksperymentalne mogą być obsługiwane tylko przez niektóre wersje kompilatora. Mogą one również zachowywać się inaczej w różnych wersjach kompilatora. Często najlepszą lub jedyną dokumentacją opcji eksperymentalnych jest blog zespołu Microsoft C++.

Opcja Przeznaczenie
/experimental:module Włącza obsługę modułów eksperymentalnych.

Przestarzałe i usunięte opcje kompilatora

Opcja Przeznaczenie
/clr:noAssembly Przestarzałe. Zamiast tego użyj /LN (utwórz moduł MSIL).
/errorReport Przestarzałe. Raportowanie błędów jest kontrolowane przez ustawienia Raportowanie błędów systemu Windows (WER).
/experimental:preprocessor Przestarzałe. Umożliwia eksperymentalną obsługę preprocesora zgodnego. Korzystanie z polecenia /Zc:preprocessor
/Fr Przestarzałe. Tworzy plik informacji przeglądania bez zmiennych lokalnych.
/Ge Przestarzałe. Aktywuje sondy stosu. Domyślnie włączone.
/Gm Przestarzałe. Umożliwia minimalną ponowną kompilację.
/GX Przestarzałe. Umożliwia synchroniczną obsługę wyjątków. Zamiast tego użyj polecenia cmdlet /EH.
/GZ Przestarzałe. Umożliwia szybkie sprawdzanie. Zamiast tego użyj polecenia cmdlet /RTC1.
/H Przestarzałe. Ogranicza długość nazw zewnętrznych (publicznych).
/Og Przestarzałe. Używa optymalizacji globalnych.
/QIfist Przestarzałe. Po użyciu do określenia sposobu konwertowania z typu zmiennoprzecinkowego na typ całkowity.
/V Przestarzałe. .obj Ustawia ciąg wersji pliku.
/Wp64 Nieaktualne. Wykrywa problemy z przenośnością 64-bitową.
/Yd Przestarzałe. Umieszcza pełne informacje o debugowaniu we wszystkich plikach obiektów. Zamiast tego użyj polecenia cmdlet /Zi.
/Zc:forScope- Przestarzałe. Wyłącza zgodność w zakresie pętli.
/Ze Przestarzałe. Włącza rozszerzenia języka.
/Zg Usunięto w Visual Studio 2015 r. Generuje prototypy funkcji.

Zobacz też

Dokumentacja kompilowania języka C/C++
Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC