Partager via


Macros prédéfinies

Répertorie les macros de préprocesseur d'implémentation ANSI/ISO C99 et Microsoft C++ prédéfinies.

Le compilateur reconnaît les macros de préprocesseur prédéfinies ANSI/ISO C99 C. Par ailleurs, l'implémentation de Microsoft C++ en fournit plusieurs autres. Ces macros de préprocesseur ne prennent pas d'arguments et ne peuvent pas être redéfinies. Certaines macros prédéfinies répertoriées dans cet article sont définies avec plusieurs valeurs.

Macros prédéfinies compatibles ANSI

Macro

Description

__DATE__

Date de compilation du fichier source actuel. La date est un littéral de chaîne au format Mmm jj aaaa. Le nom du mois Mmm est le même que pour les dates générées par la fonction de bibliothèque asctime déclarée dans TIME.H.

__FILE__

Nom du fichier source actuel. __FILE__ se développe en un littéral de chaîne. Pour vous assurer que le chemin d'accès complet au fichier s'affiche, utilisez /FC (Chemin d'accès complet du fichier de code source dans les diagnostics).

__func__

Retourne le nom non qualifié et sans ornement de la fonction englobante sous la forme d'un tableau de caractères.

void Foo(){
printf("%s\n", __func__);
} // prints “Foo”

__LINE__

Numéro de ligne dans le fichier source actuel. Le numéro de ligne est un littéral d'entier décimal. Il peut être modifié au moyen d'une directive #line.

__STDC__

Indique la mise en conformité avec la norme ANSI/ISO C99. Macro définie comme constante de littéral d'entier 1 seulement si l'option /Za du compilateur est donnée et que vous ne compilez pas le code C++ ; sinon, la macro est non définie.

__TIME__

Heure de compilation la plus récente du fichier source actuel. L'heure est un littéral de chaîne au format hh:mm:ss.

__TIMESTAMP__

Date et heure de la dernière modification du fichier source actuel, exprimées en tant que littéral de chaîne au format Jjj Mmm Date hh:mm:ss aaaa, où Jjj est le jour abrégé de la semaine et Date est un entier compris entre 1 et 31.

Macros prédéfinies spécifiques à Microsoft

Macro

Description

_ATL_VER

Définit la version ATL, encodée sous la forme d'un littéral d'entier.

__AVX__

Macro définie quand /arch:AVX ou /arch:AVX2 est spécifié.

__AVX2__

Macro définie quand /arch:AVX2 est spécifié.

_CHAR_UNSIGNED

Le type char par défaut est non signé. Macro définie quand /J est spécifié.

__CLR_VER

Définit la version du Common Langage Runtime utilisée lorsque l'application a été compilée. La valeur retournée est un littéral d'entier codé au format suivant :

Mmmbbbbb

où,

  • M est la version principale du runtime ;

  • mm est la version secondaire du runtime ;

  • bbbbb est le numéro de build.

// clr_ver.cpp
// compile with: /clr
using namespace System;
int main() {
   Console::WriteLine(__CLR_VER);
}

__cplusplus_cli

Macro définie lorsque vous compilez avec /clr, /clr:pure ou /clr:safe. La valeur de __cplusplus_cli est le littéral d'entier 200406. __cplusplus_cli est appliqué dans l'unité de traduction.

// cplusplus_cli.cpp
// compile with: /clr
#include "stdio.h"
int main() {
   #ifdef __cplusplus_cli
      printf("%d\n", __cplusplus_cli);
   #else
      printf("not defined\n");
   #endif
}

__cplusplus_winrt

Macro définie lorsque vous utilisez l'option /ZW pour compiler. La valeur de __cplusplus_winrt est le littéral d'entier 201009.

__COUNTER__

Se développe en un littéral d'entier commençant par 0 et s'incrémentant de 1 chaque fois qu'il est utilisé dans un fichier source ou dans les en-têtes inclus du fichier source. __COUNTER__ conserve son état lorsque vous utilisez des en-têtes précompilés.

L'exemple suivant utilise __COUNTER__ pour assigner des identificateurs uniques à trois objets différents du même type.

Tout d'abord, supposez la définition de classe suivante. Le constructeur accepte un entier comme paramètre.

Dans main, l'application déclare trois objets de type exampleClass, en utilisant __COUNTER__ comme paramètre d'identificateur unique.

__cplusplus

Définie pour les programmes C++ uniquement.

_CPPRTTI

Définie pour le code compilé avec /GR (Activer les informations de type au moment de l'exécution).

_CPPUNWIND

Définie pour le code compilé à l'aide de l'un des indicateurs /EH (Modèle de gestion des exceptions).

_DEBUG

Définie lorsque vous compilez avec /LDd, /MDd et /MTd.

_DLL

Définie quand l'option /MD ou /MDd (DLL multithread) est spécifiée.

__FUNCDNAME__

Valide uniquement dans une fonction. Définit le nom décoré de la fonction englobante sous forme de littéral de chaîne.

__FUNCDNAME__ n'est pas développée si vous utilisez l'option /EP ou /P du compilateur.

L'exemple suivant utilise les macros __FUNCDNAME__, __FUNCSIG__ et __FUNCTION__ pour afficher les informations relatives à une fonction.

__FUNCSIG__

Valide uniquement dans une fonction. Définit la signature de la fonction englobante sous forme de littéral de chaîne.

__FUNCSIG__ n'est pas développée si vous utilisez l'option /EP ou /P du compilateur.

Sur un système d'exploitation 64 bits, la convention d'appel par défaut est __cdecl.

Pour obtenir un exemple, consultez __FUNCDNAME__.

__FUNCTION__

Valide uniquement dans une fonction. Définit le nom non décoré de la fonction englobante sous forme de littéral de chaîne.

__FUNCTION__ n'est pas développée si vous utilisez l'option /EP ou /P du compilateur.

Pour obtenir un exemple, consultez __FUNCDNAME__.

_INTEGRAL_MAX_BITS

Indique la taille maximale (en bits) d'un type intégral sous forme de littéral d'entier.

// integral_max_bits.cpp
#include <stdio.h>
int main() {
   printf("%d\n", _INTEGRAL_MAX_BITS);
}

_M_AMD64

Définie pour les compilations qui ciblent des processeurs x64.

_M_ARM

Définie pour les compilations qui ciblent des processeurs ARM.

_M_CEE

Définie pour une compilation qui utilise n'importe quelle forme de /clr (/clr:oldSyntax, /clr:safe, par exemple).

_M_CEE_PURE

Définie pour une compilation qui utilise /clr:pure.

_M_CEE_SAFE

Définie pour une compilation qui utilise /clr:safe.

_M_IX86

Définie pour les compilations qui ciblent des processeurs x86. Non définie pour les processeurs x64.

_M_ARM_FP

Se développe en une valeur littérale entière indiquant l'option de compilateur /arch qui a été utilisée :

  • Dans la plage 30-39, si aucune option ARM /arch n'a été spécifiée, l'architecture par défaut d'ARM a été utilisée (VFPv3).

  • Dans la plage 40-49 si /arch:VFPv4 a été utilisé.

  • Pour plus d'informations, consultez /arch (x86).

_M_IX86_FP

Se développe en une valeur littérale entière indiquant l'option de compilateur /arch qui a été utilisée :

  • 0 si /arch:IA32 a été utilisé.

  • 1 si /arch:SSE a été utilisé.

  • 2 si /arch:SSE2, /arch:AVX ou /arch:AVX2 a été utilisé. Il s'agit de la valeur par défaut si /arch n'a pas été spécifié. Lorsque /arch:AVX est spécifié, la macro __AVX__ est également définie. Lorsque /arch:AVX2 est spécifié, __AVX__ et __AVX2__ sont également définis.

  • Pour plus d'informations, consultez /arch (x86).

_M_X64

Définie pour les compilations qui ciblent des processeurs x64.

_MANAGED

Définie pour avoir la valeur 1 lorsque /clr est spécifié.

_MFC_VER

Définit la version MFC, encodée sous la forme d'un littéral d'entier.

_MSC_BUILD

Correspond à un littéral d'entier qui contient le numéro de révision figurant dans le numéro de version du compilateur. Le numéro de révision est le quatrième élément du numéro de version délimité par des points. Par exemple, si le numéro de version du compilateur Visual C++ est 15.00.20706.01, la macro _MSC_BUILD prend la valeur 1.

_MSC_EXTENSIONS

Cette macro est définie lorsque vous compilez avec l'option /Ze du compilateur (par défaut). Sa valeur, une fois définie, est 1.

_MSC_FULL_VER

Correspond à un littéral d'entier qui code les numéros de version majeure, de version mineure et de build figurant dans le numéro de version du compilateur. Le numéro de version majeure est le premier composant du numéro de version délimité par des points, le numéro de version mineure est le deuxième composant et le numéro de build est le troisième. Par exemple, si le numéro de version du compilateur Visual C++ est 15.00.20706.01, la macro _MSC_FULL_VER prend la valeur 150020706. Tapez cl /? sur la ligne de commande pour afficher le numéro de version du compilateur.

_MSC_VER

Correspond à un littéral d'entier qui code les numéros de version majeure et de version mineure figurant dans le numéro de version du compilateur. Le numéro de version majeure est le premier composant du numéro de version délimité par des points et le numéro de version mineure est le deuxième composant.

Par exemple, si le numéro de version du compilateur Visual C++ est 17.00.51106.1, la macro _MSC_VER prend la valeur 1700. Tapez cl /? sur la ligne de commande pour afficher le numéro de version du compilateur.

__MSVC_RUNTIME_CHECKS

Définie lorsque l'une des options /RTC du compilateur est spécifiée.

_MT

Définie lorsque /MD ou /MDd (DLL multithread) ou /MT ou /MTd (Multithread) est spécifié.

_NATIVE_WCHAR_T_DEFINED

Définie lorsque /Zc:wchar_t est utilisé.

_OPENMP

Définie pendant la compilation avec /openmp, retourne un littéral d'entier représentant la date de la spécification OpenMP implémentée par Visual C++.

// _OPENMP_dir.cpp
// compile with: /openmp 
#include <stdio.h> 
int main() {
   printf("%d\n", _OPENMP);
}

_VC_NODEFAULTLIB

Définie lorsque /Zl est utilisé ; consultez /Zl (Omettre le nom de la bibliothèque par défaut) pour plus d'informations.

_WCHAR_T_DEFINED

Définie lorsque /Zc:wchar_t est utilisé ou que wchar_t est défini dans un fichier d'en-tête système inclus dans votre projet.

_WIN32

Définie pour les applications Win32 et Win64. Toujours défini.

_WIN64

Définie pour les applications Win64.

Voir aussi

Référence

Macros (C/C++)

Opérateurs de préprocesseur

Directives de préprocesseur