Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’option /Zc:cmath du compilateur remplace l’implémentation du runtime des fonctions mathématiques dans l’en-tête <math.h> du runtime C et <cmath> l’en-tête de bibliothèque standard C++ par la bibliothèque libc de LLVM. Cette implémentation fournit des résultats arrondis correctement dans tous les modes d’arrondi.
Vous avez besoin de cette option pour l’évaluation au moment de la compilation des fonctions mathématiques de bibliothèque standard C++ qui deviennent constexpr en C++23 ou version ultérieure.
Cette option est expérimentale.
Syntax
/Zc:cmath
Remarks
Vous avez besoin de l’option /Zc:cmath , ainsi /std:c++23que pour l’évaluation au moment de la compilation des fonctions mathématiques qui deviennent constexpr en C++23 par proposition P0533R9 : constexpr pour <cmath> et <cstdlib>LWG Issue 3834 : Constexpr manquant pour std::intmax_t les fonctions mathématiques dans <cinttypes>.
L’option /Zc:cmath est disponible à partir de MSVC Build Tools version 14.52. Elle est désactivée par défaut.
L’activation de cette option peut affecter les performances et la précision des fonctions mathématiques déclarées dans <math.h> et <cmath>.
Lorsque vous utilisez /Zc:cmath, l’ensemble d’outils C++ établit automatiquement des liens vers libvcmath-mt.lib ou libvcmath-md.lib lorsque vous appelez des fonctions mathématiques à partir d’un en-tête de bibliothèque standard. Ces bibliothèques sont liées statiquement au binaire résultant.
Note
Les directives include système utilisent des crochets d’angle. Il est donc #include <math.h> reconnu, mais #include "math.h" ce n’est pas le cas.
Cette option remplace les directives système qui incluent <math.h> et <stdlib.h> avec des directives qui incluent des en-têtes de remplacement de bibliothèque standard. L’option affecte <cmath> et <cstdlib> parce qu’elle inclut <math.h> et <stdlib.h>. Les en-têtes de remplacement diffèrent de leurs en-têtes UCRT correspondants de la manière suivante :
Les définitions de fonctions mathématiques sont
noexcept, qui sont en conflit avec les déclarations qui ne sont pasnoexcept. Voir C2382. Les correctifs potentiels sont de supprimer les déclarations de transfert inutiles ou d’ajouternoexceptà des déclarations de transfert.Les fonctions et les définitions de macros qui ne font pas partie de la norme C++ ne sont pas fournies. Cette exclusion inclut les constantes mathématiques, telles que
M_PI. L’en-tête<numbers>de bibliothèque standard fournit des définitions conformes des variables correspondantes. Pour continuer à utiliser ces constantes mathématiques, incluez<corecrt_math_defines.h>directement ._USE_MATH_DEFINESn’a aucun effet lorsque vous utilisez/Zc:cmath.
Background
Par défaut, le runtime C universel (UCRT) implémente les fonctions mathématiques déclarées dans <math.h> et <cmath>. Windows gère et déploie l’UCRT, de sorte que les résultats des fonctions mathématiques peuvent varier en fonction de Windows version.
Lorsque vous activez /Zc:cmath, la bibliothèque libc de LLVM implémente ces fonctions mathématiques dans des bibliothèques liées statiquement nommées libvcmath-mt.lib et libvcmath-md.lib. Les outils de génération C++ déploient ces bibliothèques, et non le système d’exploitation Windows. Étant donné que ces fonctions retournent correctement des résultats arrondis, leurs résultats sont stables entre les versions du système d’exploitation et les architectures matérielles.
Pour définir cette option de compilateur dans Visual Studio
- Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.
- Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.
- Ajouter
/Zc:cmathaux options supplémentaires : volet.
Voir aussi
/Zc (Conformité)
/std (Spécifier la version du standard du langage)
Constantes mathématiques