Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kompileringsalternativet /Zc:cmath ersätter körningsimplementeringen av matematiska funktioner i <math.h> C-körningshuvudet och <cmath> C++- standardbibliotekshuvudet med LLVM:s libc. Den här implementeringen ger korrekt avrundade resultat i alla avrundningslägen.
Du behöver det här alternativet för kompileringstidsutvärdering av matematikfunktionerna för C++-standardbiblioteket som finns constexpr i C++23 eller senare.
Det här alternativet är experimentellt.
Syntax
/Zc:cmath
Remarks
Du behöver /Zc:cmath alternativet, tillsammans med /std:c++23, för kompileringstidsutvärdering av matematiska funktioner som blir constexpr i C++23 efter förslag P0533R9: constexpr för <cmath> och <cstdlib>LWG Issue 3834: Missing constexpr for std::intmax_t math functions in <cinttypes>.
Alternativet /Zc:cmath är tillgängligt från och med MSVC Build Tools version 14.52. Det är inaktiverat som standard.
Om du aktiverar det här alternativet kan det påverka prestanda och noggrannhet för matematiska funktioner som deklareras i <math.h> och <cmath>.
När du använder /Zc:cmathlänkar C++-verktygsuppsättningen automatiskt mot libvcmath-mt.lib eller libvcmath-md.lib när du anropar matematiska funktioner från en standardbiblioteksrubrik. Dessa bibliotek är statiskt länkade till den resulterande binärfilen.
Note
System inkluderar direktiv använder vinkelparenteser, så #include <math.h> identifieras men #include "math.h" är inte det.
Det här alternativet ersätter systemet med direktiv som innehåller <math.h> och <stdlib.h> med direktiv som innehåller standardbibliotekets ersättningshuvuden. Alternativet påverkar <cmath> och <cstdlib> eftersom de inkluderar <math.h> och <stdlib.h>. Ersättningshuvudena skiljer sig från motsvarande UCRT-huvuden på följande sätt:
Matematiska funktionsdefinitioner är
noexcept, som står i konflikt med deklarationer som intenoexceptär . Se C2382. Potentiella korrigeringar är att ta bort onödiga framåtdeklarationer eller lägganoexcepttill i framåtriktade deklarationer.Funktioner och makrodefinitioner som inte ingår i C++-standarden tillhandahålls inte. Det här undantaget inkluderar matematiska konstanter, till exempel
M_PI. Standardbiblioteksrubriken<numbers>innehåller överensstämmande definitioner av motsvarande variabler. Om du vill fortsätta använda dessa matematiska konstanter inkluderar du<corecrt_math_defines.h>direkt ._USE_MATH_DEFINEShar ingen effekt när du använder/Zc:cmath.
Bakgrund
Som standard implementerar UCRT (Universal C Runtime) de matematiska funktioner som deklarerats i <math.h> och <cmath>. Windows underhåller och distribuerar UCRT, så matematiska funktionsresultat kan variera beroende på Windows version.
När du aktiverar /Zc:cmathimplementerar LLVM:s libc dessa matematiska funktioner i statiskt länkade bibliotek med namnet libvcmath-mt.lib och libvcmath-md.lib. C++-byggverktygen distribuerar dessa bibliotek, inte Windows operativsystem. Eftersom dessa funktioner returnerar korrekt avrundade resultat är deras resultat stabila mellan operativsystemversioner och maskinvaruarkitekturer.
Ange det här kompilatoralternativet i Visual Studio
- Öppna dialogrutan egenskapssidor för projektet. Mer information finns i Ange C++-kompilator- och byggegenskaper i Visual Studio.
- Välj egenskapssidan Konfigurationsegenskaper>C/C++>Kommandorad .
- Lägg till
/Zc:cmathi fönstret Ytterligare alternativ: .
Se även
/Zc (Överensstämmelse)
/std (Ange språkstandardversion)
Matematiska konstanter