Macros prédéfinies

Le compilateur Microsoft C/C++ (MSVC) prédéfinit certaines macros de préprocesseur en fonction du langage (C ou C++), de la cible de compilation et des options de compilateur choisies.

MSVC prend en charge les macros de préprocesseur prédéfinies requises par les normes ANSI/ISO C99, C11 et C17 et ISO C++14, C++17 et C++20. L’implémentation prend également en charge plusieurs macros de préprocesseur spécifiques à Microsoft.

Certaines macros sont définies uniquement pour des environnements de build ou des options de compilateur spécifiques. Sauf indication contraire, les macros sont définies dans une unité de traduction comme si elles étaient spécifiées en tant qu’arguments /D d’option du compilateur. Lorsqu’il est défini, le préprocesseur développe les macros de leurs valeurs spécifiées avant la compilation. Les macros prédéfinies ne prennent aucun argument et ne peuvent pas être redéfinies.

Identificateur prédéfini standard

Le compilateur prend en charge cet identificateur prédéfini spécifié par ISO C99 et ISO C++11.

  • __func__Nom non qualifié et non qualifié de la fonction englobante en tant que tableau statique statique local de fonction de char.

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

Macros prédéfinies standard

Le compilateur prend en charge ces macros prédéfinies spécifiées par les normes ISO C99, C11, C17 et ISO C++17.

  • __cplusplus Défini en tant que valeur littérale entière lorsque l’unité de traduction est compilée en C++. Sinon, non défini.

  • __DATE__ Date de compilation du fichier source actuel. La date est un littéral de chaîne de longueur constante de la forme Mmm dd aaaa. Le nom de mois Mmm est identique au nom du mois abrégé généré par la fonction asctime C Runtime Library (CRT). Le premier caractère de date dd est un espace si la valeur est inférieure à 10. Cette macro est toujours définie.

  • __FILE__ Nom du fichier source actuel. __FILE__ s’étend sur un littéral de chaîne de caractères. Pour vous assurer que le chemin d’accès complet au fichier est affiché, utilisez /FC (chemin d’accès complet du fichier de code source dans diagnostics). Cette macro est toujours définie.

  • __LINE__ Défini comme numéro de ligne entière dans le fichier source actuel. La valeur de cette macro peut être modifiée à l’aide d’une #line directive. Le type intégral de la valeur de __LINE__ peut varier en fonction du contexte. Cette macro est toujours définie.

  • __STDC__ Défini comme 1 lorsqu’il est compilé en C et si l’option du /Za compilateur est spécifiée. À compter de Visual Studio 2022 version 17.2, il est défini comme 1 lorsqu’il est compilé en C et si l’option ou /std:c17 le /std:c11 compilateur est spécifié. Sinon, non défini.

  • __STDC_HOSTED__ Défini comme 1 si l’implémentation est une implémentation hébergée, celle qui prend en charge l’ensemble de la bibliothèque standard requise. Sinon, défini comme 0.

  • __STDC_NO_ATOMICS__ Défini comme 1 si l’implémentation ne prend pas en charge les atomiques standard facultatifs. L’implémentation MSVC la définit comme 1 lorsqu’elle est compilée en tant que C et l’une des /std options C11 ou C17 est spécifiée.

  • __STDC_NO_COMPLEX__ Défini comme 1 si l’implémentation ne prend pas en charge les nombres complexes standard facultatifs. L’implémentation MSVC la définit comme 1 lorsqu’elle est compilée en tant que C et l’une des /std options C11 ou C17 est spécifiée.

  • __STDC_NO_THREADS__ Défini comme 1 si l’implémentation ne prend pas en charge les threads standard facultatifs. L’implémentation MSVC la définit comme 1 lorsqu’elle est compilée en tant que C et l’une des /std options C11 ou C17 est spécifiée.

  • __STDC_NO_VLA__ Défini comme 1 si l’implémentation ne prend pas en charge les tableaux de longueur variable standard. L’implémentation MSVC la définit comme 1 lorsqu’elle est compilée en tant que C et l’une des /std options C11 ou C17 est spécifiée.

  • __STDC_VERSION__ Définie lorsqu’elle est compilée en tant que C et que l’une /std des options C11 ou C17 est spécifiée. Il s’étend pour 201112L/std:c11, et 201710L pour /std:c17.

  • __STDCPP_DEFAULT_NEW_ALIGNMENT__ Quand /std:c17 ou une version ultérieure est spécifiée, cette macro s’étend sur un size_t littéral qui a la valeur de l’alignement garanti par un appel à l’alignement sans connaissance operator new. Les alignements plus volumineux sont passés à une surcharge prenant en charge l’alignement, par operator new(std::size_t, std::align_val_t)exemple . Pour plus d’informations, consultez /Zc:alignedNew (allocation sur-alignée C++17).

  • __STDCPP_THREADS__ Défini comme 1 si et uniquement si un programme peut avoir plusieurs threads d’exécution et compilé en tant que C++. Sinon, non défini.

  • __TIME__ Heure de traduction de l’unité de traduction prétraite. L’heure est un littéral de chaîne de caractères de la forme hh :mm :ss, identique à l’heure retournée par la fonction asctime CRT. Cette macro est toujours définie.

Macros prédéfinies spécifiques à Microsoft

MSVC prend en charge d’autres macros prédéfinies :

  • __ATOM__ Défini comme 1 lorsque l’option du /favor:ATOM compilateur est définie et que la cible du compilateur est x86 ou x64. Sinon, non défini.

  • __AVX__ Défini comme 1 lorsque les /arch:AVXoptions , /arch:AVX2ou /arch:AVX512 compilateur sont définies et que la cible du compilateur est x86 ou x64. Sinon, non défini.

  • __AVX2__Défini comme 1 lorsque l’option ou /arch:AVX512 le /arch:AVX2 compilateur est défini et que la cible du compilateur est x86 ou x64. Sinon, non défini.

  • __AVX512BW__ Défini comme 1 lorsque l’option du /arch:AVX512 compilateur est définie et que la cible du compilateur est x86 ou x64. Sinon, non défini.

  • __AVX512CD__ Défini comme 1 lorsque l’option du /arch:AVX512 compilateur est définie et que la cible du compilateur est x86 ou x64. Sinon, non défini.

  • __AVX512DQ__ Défini comme 1 lorsque l’option du /arch:AVX512 compilateur est définie et que la cible du compilateur est x86 ou x64. Sinon, non défini.

  • __AVX512F__ Défini comme 1 lorsque l’option du /arch:AVX512 compilateur est définie et que la cible du compilateur est x86 ou x64. Sinon, non défini.

  • __AVX512VL__ Défini comme 1 lorsque l’option du /arch:AVX512 compilateur est définie et que la cible du compilateur est x86 ou x64. Sinon, non défini.

  • _CHAR_UNSIGNED Défini comme 1 si le type par défaut char n’est pas signé. Cette valeur est définie lorsque l’option /J du compilateur (type char par défaut n’est pas signé) est définie. Sinon, non défini.

  • __CLR_VER Défini en tant que littéral entier qui représente la version du Common Language Runtime (CLR) utilisée pour compiler l’application. La valeur est encodée dans le formulaire Mmmbbbbb, où M est la version principale du runtime, mm est la version mineure du runtime et bbbbb est le numéro de build. __CLR_VER est défini si l’option du /clr compilateur est définie. Sinon, non défini.

    // clr_ver.cpp
    // compile with: /clr
    using namespace System;
    int main() {
       Console::WriteLine(__CLR_VER);
    }
    
  • _CONTROL_FLOW_GUARD Défini comme 1 lorsque l’option du /guard:cf compilateur (Activer Control Flow Guard) est définie. Sinon, non défini.

  • __COUNTER__ S’étend sur un littéral entier qui commence à 0. La valeur est incrémentée de 1 chaque fois qu’elle est utilisée dans un fichier source ou dans les en-têtes inclus du fichier source. __COUNTER__ mémorise son état lorsque vous utilisez des en-têtes précompilés. Cette macro est toujours définie.

    Cet exemple utilise __COUNTER__ pour affecter des identificateurs uniques à trois objets différents du même type. Le exampleClass constructeur prend un entier comme paramètre. Dans main, l’application déclare trois objets de type exampleClass, à l’aide __COUNTER__ du paramètre d’identificateur unique :

    // macro__COUNTER__.cpp
    // Demonstration of __COUNTER__, assigns unique identifiers to
    // different objects of the same type.
    // Compile by using: cl /EHsc /W4 macro__COUNTER__.cpp
    #include <stdio.h>
    
    class exampleClass {
        int m_nID;
    public:
        // initialize object with a read-only unique ID
        exampleClass(int nID) : m_nID(nID) {}
        int GetID(void) { return m_nID; }
    };
    
    int main()
    {
        // __COUNTER__ is initially defined as 0
        exampleClass e1(__COUNTER__);
    
        // On the second reference, __COUNTER__ is now defined as 1
        exampleClass e2(__COUNTER__);
    
        // __COUNTER__ is now defined as 2
        exampleClass e3(__COUNTER__);
    
        printf("e1 ID: %i\n", e1.GetID());
        printf("e2 ID: %i\n", e2.GetID());
        printf("e3 ID: %i\n", e3.GetID());
    
        // Output
        // ------------------------------
        // e1 ID: 0
        // e2 ID: 1
        // e3 ID: 2
    
        return 0;
    }
    
  • __cplusplus_cli Définie comme valeur littérale entière 200406 lorsqu’elle est compilée en tant que C++ et qu’une /clr option de compilateur est définie. Sinon, non défini. Lorsqu’elle est définie, __cplusplus_cli est en vigueur dans toute l’unité de traduction.

    // cplusplus_cli.cpp
    // compile by using /clr
    #include "stdio.h"
    int main() {
       #ifdef __cplusplus_cli
          printf("%d\n", __cplusplus_cli);
       #else
          printf("not defined\n");
       #endif
    }
    
  • __cplusplus_winrt Définie comme valeur littérale entière 201009 lorsqu’elle est compilée en tant que C++ et que l’option du /ZW compilateur (compilation Windows Runtime) est définie. Sinon, non défini.

  • _CPPRTTI Définie comme 1 si l’option du compilateur (Activer les /GR informations de type d’exécution) est définie. Sinon, non défini.

  • _CPPUNWINDDéfinie comme 1 si une ou plusieurs des options du compilateur (Activer la /GX gestion des exceptions),/clr (Compilation Common Language Runtime) ou /EH (Modèle de gestion des exceptions) sont définies. Sinon, non défini.

  • _DEBUG Défini comme 1 lorsque l’option /LDd, /MDdou /MTd compilateur est définie. Sinon, non défini.

  • _DLL Défini comme 1 lorsque l’option du /MD compilateur ou /MDd (DLL multithread) est définie. Sinon, non défini.

  • __FUNCDNAME__ Défini en tant que littéral de chaîne qui contient le nom décoré de la fonction englobante. La macro est définie uniquement dans une fonction. La __FUNCDNAME__ macro n’est pas développée si vous utilisez l’option ou /P l’option /EP du compilateur.

    Cet exemple utilise les macros , __FUNCSIG__et __FUNCTION__ les __FUNCDNAME__macros pour afficher les informations de fonction.

    // Demonstrates functionality of __FUNCTION__, __FUNCDNAME__, and __FUNCSIG__ macros
    void exampleFunction()
    {
        printf("Function name: %s\n", __FUNCTION__);
        printf("Decorated function name: %s\n", __FUNCDNAME__);
        printf("Function signature: %s\n", __FUNCSIG__);
    
        // Sample Output
        // -------------------------------------------------
        // Function name: exampleFunction
        // Decorated function name: ?exampleFunction@@YAXXZ
        // Function signature: void __cdecl exampleFunction(void)
    }
    
  • __FUNCSIG__ Défini en tant que littéral de chaîne qui contient la signature de la fonction englobante. La macro est définie uniquement dans une fonction. La __FUNCSIG__ macro n’est pas développée si vous utilisez l’option ou /P l’option /EP du compilateur. Lorsqu’elle est compilée pour une cible 64 bits, la convention d’appel est __cdecl par défaut. Pour obtenir un exemple d’utilisation, consultez la __FUNCDNAME__ macro.

  • __FUNCTION__ Défini en tant que littéral de chaîne qui contient le nom non décodé de la fonction englobante. La macro est définie uniquement dans une fonction. La __FUNCTION__ macro n’est pas développée si vous utilisez l’option ou /P l’option /EP du compilateur. Pour obtenir un exemple d’utilisation, consultez la __FUNCDNAME__ macro.

  • _INTEGRAL_MAX_BITS Définie comme valeur littérale entière 64, taille maximale (en bits) pour un type intégral non vectoriel. Cette macro est toujours définie.

    // integral_max_bits.cpp
    #include <stdio.h>
    int main() {
        printf("%d\n", _INTEGRAL_MAX_BITS);
    }
    
  • __INTELLISENSE__ Défini comme 1 lors d’une transmission du compilateur IntelliSense dans l’IDE Visual Studio. Sinon, non défini. Vous pouvez utiliser cette macro pour protéger le code que le compilateur IntelliSense ne comprend pas, ou l’utiliser pour basculer entre la build et le compilateur IntelliSense. Pour plus d’informations, consultez Résolution des problèmes Astuces pour IntelliSense Slowness.

  • _ISO_VOLATILE Défini comme 1 si l’option du /volatile:iso compilateur est définie. Sinon, non défini.

  • _KERNEL_MODE Défini comme 1 si l’option du compilateur (Créer le /kernel mode noyau binaire) est définie. Sinon, non défini.

  • _M_AMD64 Défini comme valeur littérale entière 100 pour les compilations qui ciblent des processeurs x64 ou des ARM64EC. Sinon, non défini.

  • _M_ARM Défini comme valeur littérale entière 7 pour les compilations qui ciblent des processeurs ARM. Non défini pour ARM64, ARM64EC et d’autres cibles.

  • _M_ARM_ARMV7VE Défini comme 1 lorsque l’option du /arch:ARMv7VE compilateur est définie pour les compilations qui ciblent les processeurs ARM. Sinon, non défini.

  • _M_ARM_FP Défini en tant que valeur littérale entière qui indique l’option /arch du compilateur définie pour les cibles de processeur ARM. Sinon, non défini.

    • Valeur de la plage 30-39 si aucune option ARM n’a /arch été spécifiée, indiquant l’architecture par défaut pour ARM a été définie (VFPv3).

    • Valeur de la plage 40-49 si /arch:VFPv4 elle a été définie.

    • Pour plus d’informations, consultez /arch (ARM).

  • _M_ARM64 Défini comme 1 pour les compilations qui ciblent ARM64. Sinon, non défini.

  • _M_ARM64EC Défini comme 1 pour les compilations qui ciblent ARM64EC. Sinon, non défini.

  • _M_CEE Définie comme 001 si une /clr option de compilateur (compilation Common Language Runtime) est définie. Sinon, non défini.

  • _M_CEE_PURE Déconseillé depuis Visual Studio 2015. Défini comme 001 si l’option du /clr:pure compilateur est définie. Sinon, non défini.

  • _M_CEE_SAFE Déconseillé depuis Visual Studio 2015. Défini comme 001 si l’option du /clr:safe compilateur est définie. Sinon, non défini.

  • _M_FP_CONTRACT Disponible à partir de Visual Studio 2022. Défini comme 1 si l’option /fp:contract du compilateur est /fp:fast définie. Sinon, non défini.

  • _M_FP_EXCEPT Défini comme 1 si l’option /fp:except du compilateur est /fp:strict définie. Sinon, non défini.

  • _M_FP_FAST Défini comme 1 si l’option du /fp:fast compilateur est définie. Sinon, non défini.

  • _M_FP_PRECISE Défini comme 1 si l’option du /fp:precise compilateur est définie. Sinon, non défini.

  • _M_FP_STRICT Défini comme 1 si l’option du /fp:strict compilateur est définie. Sinon, non défini.

  • _M_IX86 Défini comme valeur littérale entière 600 pour les compilations qui ciblent des processeurs x86. Cette macro n’est pas définie pour les cibles de compilation x64 ou ARM.

  • _M_IX86_FP Défini en tant que valeur littérale entière qui indique l’option du /arch compilateur définie ou la valeur par défaut. Cette macro est toujours définie lorsque la cible de compilation est un processeur x86. Sinon, non défini. Quand elle est définie, la valeur est la suivante :

    • 0 si l’option du /arch:IA32 compilateur a été définie.

    • 1 si l’option du /arch:SSE compilateur a été définie.

    • 2 si l’option /arch:SSE2, , /arch:AVX/arch:AVX2ou /arch:AVX512 compilateur a été définie. Cette valeur est la valeur par défaut si aucune /arch option de compilateur n’a été spécifiée. Quand /arch:AVX elle est spécifiée, la macro __AVX__ est également définie. Quand /arch:AVX2 elle est spécifiée, les deux __AVX__ et __AVX2__ sont également définies. Quand /arch:AVX512 est spécifié, __AVX__, , __AVX2____AVX512BW__, __AVX512CD__, __AVX512DQ__, , __AVX512F__et __AVX512VL__ sont également définis.

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

  • _M_X64 Défini comme valeur littérale entière 100 pour les compilations qui ciblent des processeurs x64 ou des ARM64EC. Sinon, non défini.

  • _MANAGED Défini comme 1 lorsque l’option du /clr compilateur est définie. Sinon, non défini.

  • _MSC_BUILD Défini en tant que littéral entier qui contient l’élément numéro de révision du numéro de version du compilateur. Le numéro de révision est le dernier élément du numéro de version délimité par période. Par exemple, si le numéro de version du compilateur Microsoft C/C++ est 15.00.20706.01, la _MSC_BUILD macro est 1. Cette macro est toujours définie.

  • _MSC_EXTENSIONS Défini comme 1 si l’option du compilateur on-by-default /Ze (Enable Language Extensions) est définie. Sinon, non défini.

  • _MSC_FULL_VER Défini en tant que littéral entier qui encode les éléments principaux, mineurs et de numéros de build du numéro de version du compilateur. Le nombre principal est le premier élément du numéro de version délimité par un point, le numéro secondaire est le deuxième élément et le numéro de build est le troisième élément.

    Par exemple, si la version du compilateur Microsoft C/C++ est 19.39.33519, _MSC_FULL_VER est 193933519. Entrez cl /? à la ligne de commande pour afficher le numéro de version du compilateur. Cette macro est toujours définie. Pour plus d’informations sur le contrôle de version du compilateur, consultez le contrôle de version du compilateur C++ et spécifiquement les versions de Service à partir de Visual Studio 2017 pour plus d’informations sur Visual Studio 2019 16.8, 16.9, 16.10 et 16.11, ce qui nécessite _MSC_FULL_VER de les distinguer.

  • _MSC_VER Défini en tant que littéral entier qui encode les éléments de nombre principal et secondaire du numéro de version du compilateur. Le nombre principal est le premier élément du numéro de version délimité par un point et le numéro secondaire est le deuxième élément. Par exemple, si le numéro de version du compilateur Microsoft C/C++ est 17.00.51106.1, la valeur est _MSC_VER 1700. Entrez cl /? à la ligne de commande pour afficher le numéro de version du compilateur. Cette macro est toujours définie.

    Pour tester les versions ou mises à jour du compilateur dans une version donnée de Visual Studio ou ultérieure, utilisez l’opérateur >= . Vous pouvez l’utiliser dans une directive conditionnelle pour la comparer _MSC_VER à cette version connue. Si vous avez plusieurs versions mutuellement exclusives à comparer, commandez vos comparaisons dans l’ordre décroissant du numéro de version. Par exemple, ce code case activée pour les compilateurs publiés dans Visual Studio 2017 et versions ultérieures. Ensuite, il case activée s pour les compilateurs publiés dans ou après Visual Studio 2015. Il case activée ensuite pour tous les compilateurs publiés avant Visual Studio 2015 :

    #if _MSC_VER >= 1910
    // . . .
    #elif _MSC_VER >= 1900
    // . . .
    #else
    // . . .
    #endif
    

    Pour plus d’informations sur Visual Studio 2019 16.8 et 16.9 et 16.10 et 16.11, qui partagent les mêmes versions principales et mineures (et ont donc la même valeur pour _MSC_VER), consultez les versions de Service à partir de Visual Studio 2017.

    Pour plus d’informations sur l’historique du contrôle de version du compilateur et les numéros de version du compilateur et les versions de Visual Studio auxquelles ils correspondent, consultez le contrôle de version du compilateur C++. En outre, version du compilateur Visual C++ sur le blog de l’équipe Microsoft C++.

  • _MSVC_LANG Défini en tant que littéral entier qui spécifie la norme de langage C++ ciblée par le compilateur. Il est défini uniquement dans le code compilé en C++. La macro est la valeur 201402L littérale entière par défaut ou lorsque l’option du /std:c++14 compilateur est spécifiée. La macro est définie 201703L si l’option du /std:c++17 compilateur est spécifiée. La macro est définie 202002L si l’option du /std:c++20 compilateur est spécifiée. Elle est définie sur une valeur supérieure, non spécifiée lorsque l’option /std:c++latest est spécifiée. Sinon, la macro n’est pas définie. Les _MSVC_LANG options du compilateur macro et /std (Spécifier la version standard du langage) sont disponibles à partir de Visual Studio 2015 Update 3.

  • __MSVC_RUNTIME_CHECKS Défini comme 1 lorsque l’une des options du /RTC compilateur est définie. Sinon, non défini.

  • _MSVC_TRADITIONAL:

    • Disponible à partir de Visual Studio 2017 version 15.8 : défini comme 0 lorsque l’option du compilateur en mode /experimental:preprocessor de conformité du préprocesseur est définie. Défini comme 1 par défaut, ou lorsque l’option du /experimental:preprocessor- compilateur est définie, pour indiquer que le préprocesseur traditionnel est en cours d’utilisation.
    • Disponible à partir de Visual Studio 2019 version 16.5 : défini comme 0 lorsque l’option du compilateur en mode /Zc:preprocessor de conformité du préprocesseur est définie. Défini comme 1 par défaut, ou lorsque l’option du /Zc:preprocessor- compilateur est définie, pour indiquer que le préprocesseur traditionnel est en cours d’utilisation (essentiellement, /Zc:preprocessor remplace le déprécié /experimental:preprocessor).
    #if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL
    // Logic using the traditional preprocessor
    #else
    // Logic using cross-platform compatible preprocessor
    #endif
    
  • _MTDéfini comme 1 quand /MD ou /MDd (DLL multithread) ou /MTd/MT (multithreaded) est spécifié. Sinon, non défini.

  • _NATIVE_WCHAR_T_DEFINED Défini comme 1 lorsque l’option du /Zc:wchar_t compilateur est définie. Sinon, non défini.

  • _OPENMP Défini en tant que littéral entier 200203, si l’option /openmp du compilateur (Activer OpenMP 2.0 Support) est définie. Cette valeur représente la date de la spécification OpenMP implémentée par MSVC. Sinon, non défini.

    // _OPENMP_dir.cpp
    // compile with: /openmp
    #include <stdio.h>
    int main() {
        printf("%d\n", _OPENMP);
    }
    
  • _PREFAST_ Défini comme 1 lorsque l’option du /analyze compilateur est définie. Sinon, non défini.

  • __SANITIZE_ADDRESS__ Disponible à partir de Visual Studio 2019 version 16.9. Défini comme 1 lorsque l’option du /fsanitize=address compilateur est définie. Sinon, non défini.

  • __TIMESTAMP__Défini en tant que littéral de chaîne qui contient la date et l’heure de la dernière modification du fichier source actuel, dans la forme abrégée de longueur constante retournée par la fonction CRTasctime, par exemple. Fri 19 Aug 13:32:58 2016 Cette macro est toujours définie.

  • _VC_NODEFAULTLIB Défini comme 1 lorsque l’option du compilateur (omettre le /Zl nom de la bibliothèque par défaut) est définie. Sinon, non défini.

  • _WCHAR_T_DEFINED Défini comme 1 lorsque l’option du compilateur par défaut /Zc:wchar_t est définie. La _WCHAR_T_DEFINED macro est définie, mais n’a aucune valeur si l’option du /Zc:wchar_t- compilateur est définie et wchar_t est définie dans un fichier d’en-tête système inclus dans votre projet. Sinon, non défini.

  • _WIN32 Défini comme 1 lorsque la cible de compilation est ARM 32 bits, ARM 64 bits, x86 ou x64. Sinon, non défini.

  • _WIN64 Défini comme 1 lorsque la cible de compilation est arm 64 bits ou x64. Sinon, non défini.

  • _WINRT_DLL Défini comme 1 lorsqu’il est compilé en C++ et à la fois /ZW (compilation Windows Runtime) et /LD ou /LDd les options du compilateur sont définies. Sinon, non défini.

Aucune macro de préprocesseur qui identifie la version de bibliothèque ATL ou MFC n’est prédéfinie par le compilateur. Les en-têtes de bibliothèque ATL et MFC définissent ces macros de version en interne. Ils ne sont pas définis dans les directives de préprocesseur effectuées avant l’inclusion de l’en-tête requis.

  • _ATL_VER Défini en <atldef.h> tant que littéral entier qui encode le numéro de version ATL.

  • _MFC_VER Défini en <afxver_.h> tant que littéral entier qui encode le numéro de version MFC.

Voir aussi

Macros (C/C++)
Opérateurs de préprocesseur
Directives de préprocesseur