Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Opcja /Zc:cmath kompilatora zastępuje implementację środowiska uruchomieniowego funkcji matematycznych w <math.h> nagłówku środowiska uruchomieniowego języka C i <cmath> nagłówku standardowej biblioteki języka C++ biblioteką libc llVM. Ta implementacja zapewnia poprawne zaokrąglenie wyników we wszystkich trybach zaokrąglania.
Ta opcja jest potrzebna do obliczania w czasie kompilacji standardowych funkcji matematycznych biblioteki języka C++, które stają się constexpr w języku C++23 lub nowszym.
Ta opcja jest eksperymentalna.
Syntax
/Zc:cmath
Remarks
Potrzebna jest /Zc:cmath opcja wraz z opcją /std:c++23, w przypadku obliczania w czasie kompilacji funkcji matematycznych, które stają się constexpr w języku C++23 przez propozycję P0533R9: for <cmath> i <cstdlib>LWG Problem 3834: constexprBrak constexpr dla std::intmax_t funkcji matematycznych w programie <cinttypes>.
Opcja /Zc:cmath jest dostępna począwszy od narzędzi MSVC Build Tools w wersji 14.52. Domyślnie jest wyłączona.
Włączenie tej opcji może mieć wpływ na wydajność i dokładność funkcji matematycznych zadeklarowanych w elementach <math.h> i <cmath>.
W przypadku używania zestawu /Zc:cmathnarzędzi języka C++ automatycznie łączy się z funkcją libvcmath-mt.lib matematyczną lub libvcmath-md.lib podczas wywoływania funkcji matematycznych ze standardowego nagłówka biblioteki. Te biblioteki są statycznie połączone z wynikowym plikiem binarnym.
Note
Dyrektywy dołączania systemu używają nawiasów kątowych, więc #include <math.h> jest rozpoznawany, ale #include "math.h" nie.
Ta opcja zastępuje dyrektywy dołączane przez <stdlib.h> system i <math.h> dyrektywy zawierające standardowe nagłówki zastępcze biblioteki. Ta opcja ma wpływ na <cmath> elementy i <cstdlib> dlatego, że są one uwzględniane <math.h> i <stdlib.h>. Nagłówki zastępcze różnią się od odpowiednich nagłówków UCRT w następujący sposób:
Definicje funkcji matematycznych to
noexcept, co powoduje konflikt z deklaracjami, które nienoexceptsą . Zobacz C2382. Potencjalne poprawki to usunięcie niepotrzebnych deklaracji przekazywania lub dodanienoexceptich do deklaracji przekazywania.Nie podano definicji funkcji i makr, które nie są częścią standardu C++. To wykluczenie obejmuje stałe matematyczne, takie jak
M_PI. Nagłówek<numbers>biblioteki standardowej zawiera zgodne definicje odpowiednich zmiennych. Aby nadal używać tych stałych matematycznych, bezpośrednio dołącz element<corecrt_math_defines.h>._USE_MATH_DEFINESnie ma żadnego efektu w przypadku używania polecenia/Zc:cmath.
Kontekst
Domyślnie środowisko universal C Runtime (UCRT) implementuje funkcje matematyczne zadeklarowane w systemach <math.h> i <cmath>. Windows obsługuje i wdraża narzędzie UCRT, więc wyniki funkcji matematycznych mogą się różnić w zależności od Windows wersji.
Po włączeniu /Zc:cmathbiblioteki libc llVM implementuje te funkcje matematyczne w statycznie połączonych bibliotekach o nazwach libvcmath-mt.lib i libvcmath-md.lib. Narzędzia kompilacji języka C++ wdrażają te biblioteki, a nie Windows systemu operacyjnego. Ponieważ te funkcje zwracają poprawnie zaokrąglone wyniki, ich wyniki są stabilne w różnych wersjach systemu operacyjnego i architekturach sprzętu.
Aby ustawić tę opcję kompilatora w Visual Studio
- Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).
- Wybierz stronę Właściwości>konfiguracji C/C++>Wiersza polecenia.
- Dodaj
/Zc:cmathdo okienka Dodatkowe opcje: .
Zobacz także
/Zc (Zgodność)
/std (Określ wersję standardową języka)
Stałe matematyczne