Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De /Zc:cmath compileroptie vervangt de runtime-implementatie van wiskundige functies in de <math.h> C Runtime-header en <cmath> de standaardbibliotheekheader van C++ door de libc van LLVM. Deze implementatie biedt correct afgeronde resultaten in alle afrondingsmodi.
U hebt deze optie nodig voor het compileren van de standaardbibliotheekfuncties van de C++-standaardbibliotheek die in C++23 of hoger worden constexpr .
Deze optie is experimenteel.
Syntax
/Zc:cmath
Remarks
U hebt de /Zc:cmath optie nodig, samen met /std:c++23, voor de compilatietijdsevaluatie van de wiskundige functies die in C++23 worden constexpr op voorstel P0533R9: constexpr voor <cmath> en <cstdlib>LWG-probleem 3834: Ontbrekende constexpr voor std::intmax_t wiskundige functies in <cinttypes>.
De /Zc:cmath optie is beschikbaar vanaf MSVC Build Tools versie 14.52. Deze is standaard uitgeschakeld.
Als u deze optie inschakelt, kan dit van invloed zijn op de prestaties en nauwkeurigheid van wiskundige functies die zijn gedeclareerd in <math.h> en <cmath>.
Wanneer u deze gebruikt /Zc:cmath, wordt de C++-toolset automatisch gekoppeld aan libvcmath-mt.lib of libvcmath-md.lib wanneer u wiskundige functies aanroept vanuit een standaardbibliotheekheader. Deze bibliotheken worden statisch gekoppeld aan het resulterende binaire bestand.
Note
Systeem bevat instructies die hoekhaken gebruiken, dus #include <math.h> wordt herkend, maar #include "math.h" niet.
Met deze optie worden systeemrichtlijnen vervangen die onder andere richtlijnen bevatten <math.h><stdlib.h> die standaardkopteksten voor bibliotheekvervanging bevatten. De optie is van invloed op <cmath> en <cstdlib> omdat ze zijn opgenomen <math.h> en <stdlib.h>. De vervangende headers verschillen van de bijbehorende UCRT-headers op de volgende manieren:
Wiskundige functiedefinities zijn
noexcept, die conflicteert met declaraties die nietnoexceptzijn. Zie C2382. Mogelijke oplossingen zijn het verwijderen van onnodige forward-declaraties of het toevoegennoexceptvan declaraties aan doorstuurdeclaraties.Functies en macrodefinities die geen deel uitmaken van de C++-standaard, worden niet opgegeven. Deze uitsluiting omvat de wiskundige constanten, zoals
M_PI. De<numbers>standaardbibliotheekheader biedt conforme definities van bijbehorende variabelen. Als u deze wiskundige constanten wilt blijven gebruiken, neemt u direct op<corecrt_math_defines.h>._USE_MATH_DEFINESheeft geen effect wanneer u gebruikt/Zc:cmath.
Achtergrond
De Universal C Runtime (UCRT) implementeert standaard de wiskundige functies die zijn gedeclareerd in <math.h> en <cmath>. Windows onderhoudt en implementeert het UCRT, zodat de resultaten van wiskundige functies kunnen variƫren per Windows versie.
Wanneer u dit inschakelt /Zc:cmath, implementeert LLVM's libc deze wiskundige functies in statisch gekoppelde bibliotheken met de naam libvcmath-mt.lib en libvcmath-md.lib. De C++-buildhulpprogramma's implementeren deze bibliotheken, niet het Windows besturingssysteem. Omdat deze functies correct afgeronde resultaten retourneren, zijn hun resultaten stabiel in besturingssysteemversies en hardwarearchitecturen.
Deze compileroptie instellen in Visual Studio
- Open het dialoogvenster eigenschappenpagina's van het project. Zie C++ compiler en buildeigenschappen instellen in Visual Studio voor meer informatie.
- Selecteer de eigenschappenpagina configuratie-eigenschappen>C/C++>.
- Toevoegen
/Zc:cmathaan het deelvenster Extra opties:
Zie ook
/Zc (Conformiteit)
/std (Taalstandaardversie opgeven)
Wiskundige constanten