Предустановленный макрос

 

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

Компилятор Visual C++ определяется готовый определенные макросы препроцессора, в зависимости от языка (C или C++), целевого объекта компиляции и параметры выбранного компилятора.

Visual C++ поддерживает необходимые предопределенные макросы препроцессора, определяемый стандартом ANSI/ISO C99 и ISO стандартом C ++ 14. Реализация также поддерживает несколько дополнительных системам Microsoft макросов препроцессора. Некоторые макросы определяются только для определенной сборки сред или параметры компилятора. Если не указано, макросы определяются в записи преобразования, как если бы они были указаны как /D аргументов параметра компилятора. При определении, макросы разворачиваются препроцессором перед компиляцией указанные значения. Предопределенные макросы не принимают аргументы и не могут быть переопределены.

Компилятор поддерживает это предопределенный идентификатор, определяемый C99 стандарта ISO и ISO C ++ 11.

  • __func__ неполное и недекорируемое имя включающей функции в виде функции локальной static``const массив char.

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

Компилятор поддерживает следующие предопределенные макросы, определяемый ISO C99 и C ++ 14 стандартов ISO.

  • __cplusplus определен как значение целочисленного литерала, когда записи преобразования компилируется как C++. В противном случае не определено.

  • __DATE__ Дата компиляции текущего файла исходного кода. Дата — это строка константы длиной литерал в формате ммм дд гггг. Название месяца Mmm совпадает сокращенное название месяца в дат, созданных библиотекой времени выполнения C asctime функции. Дата первого символа дд — это пространство, если значение меньше 10. Этот макрос определяется всегда.

  • __FILE__ имя текущего файла исходного кода. __FILE__ разворачивается для символьного литерала. Чтобы убедиться, что отображается полный путь к файлу, используйте /FC (полный путь для файла исходного кода в диагностики). Этот макрос определяется всегда.

  • __LINE__ определяется как целое число номер строки в текущем исходном файле. Значение __LINE__ макрос может быть изменен с помощью #line директивы. Этот макрос определяется всегда.

  • __STDC__ определен как 1 только в том случае, если компилируется как C и /Za указан параметр компилятора. В противном случае не определено.

  • __STDC_HOSTED__ определен как 1, если реализация hosted реализацию, поддерживает все необходимые стандартной библиотеки. В противном случае — определяется как 0.

  • __STDCPP_THREADS__ определяется как 1 только в том случае, если в программе может присутствовать более чем один поток исполнения и скомпилирован как C++. В противном случае не определено.

  • __TIME__ время перевод записи преобразования предварительной обработки. Время представляет собой строку символов литерал в формате чч, таким же, как время, возвращенное библиотекой времени выполнения C asctime функции. Этот макрос определяется всегда.

Microsoft Visual C++ поддерживает следующие дополнительные предопределенные макросы.

  • __ATOM__ определяется как 1, если /favor:ATOM задан параметр компилятора, и компилятор должен x86 или x64. В противном случае не определено.

  • __AVX__ определяется как 1, если /arch: AVX или /arch:AVX2 установлены параметры компилятора и компилятор должен x86 или x64. В противном случае не определено.

  • __AVX2__ определяется как 1, если /arch:AVX2 задан параметр компилятора, и компилятор должен x86 или x64. В противном случае не определено.

  • _CHAR_UNSIGNED определяется как 1, если значение по умолчанию char тип без знака. Когда устанавливается /J (по умолчанию — тип unsigned char) задан параметр компилятора. В противном случае не определено.

  • __CLR_VER определяется как целочисленный литерал, представляющую версию общеязыковой среды выполнения, используемой при компиляции приложения. Значение кодируется в виде Mmmbbbbb, где M — Основная версия среды выполнения, mm — Дополнительная версия среды выполнения, и bbbbb — номер сборки. __CLR_VER определяется, если /CLR задан параметр компилятора. В противном случае не определено.

    // clr_ver.cpp  
    // compile with: /clr  
    using namespace System;  
    int main() {  
       Console::WriteLine(__CLR_VER);  
    }  
    
    
  • _CONTROL_FLOW_GUARD определяется как 1, если /guard:cf (Включение защиты потока управления) задан параметр компилятора. В противном случае не определено.

  • __COUNTER__ Expands целочисленный литерал, который начинается с 0 и увеличивается на 1 каждый раз, он используется в исходном файле или во включенных заголовках исходного файла. __COUNTER__ запоминает свое состояние при использовании предкомпилированных заголовков. Этот макрос определяется всегда.

    В этом примере используется __COUNTER__ присваивает уникальные идентификаторы трем различным объектам одного типа. exampleClass Конструктор принимает целое число как параметр. В main, приложение объявляет три объекта типа exampleClass, используя __COUNTER__ в качестве параметра уникального идентификатора:

    // 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 определяется как целочисленное литеральное значение 200406 при компиляции как C++ и /CLR, /CLR: pure, или /CLR: safe задан параметр компилятора. В противном случае не определено. Если определено, __cplusplus_cli действует во всем блоке преобразования.

    // 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 определяется как целочисленное литеральное значение 201009 при компиляции как C++ и /ZW (компиляция среды выполнения Windows) задан параметр компилятора. В противном случае не определено.

  • _CPPRTTI определяется как 1, если /GR (включить информацию о типах времени выполнения) задан параметр компилятора. В противном случае не определено.

  • _CPPUNWIND определяется как 1, если один или несколько /GX (Включить обработку исключений), /CLR (компиляция CLR), или /EH (модель обработки исключений) установлены параметры компилятора. В противном случае не определено.

  • _DEBUG определен как 1, если /LDd, /MDd, или /MTd задан параметр компилятора. В противном случае не определено.

  • _DLL определяется как 1, если /MD или /MDd задан параметр компилятора (Многопоточная DLL). В противном случае не определено.

  • __FUNCDNAME__ определяется как строковый литерал, содержащий декорированное имя внешней функции. Макрос определяется только в пределах функции. __FUNCDNAME__ макрос не разворачивается при использовании /EP или /P параметр компилятора.

    В этом примере используется __FUNCDNAME__, __FUNCSIG__, и __FUNCTION__ макросы для отображения сведений о функции.

    // 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__ определяется как строковый литерал, содержащий сигнатуру включающей функции. Макрос определяется только в пределах функции. __FUNCSIG__ макрос не разворачивается при использовании /EP или /P параметр компилятора. При компиляции для 64-разрядных конечных соглашение о вызовах — __cdecl по умолчанию. Пример использования см. в разделе __FUNCDNAME__ макрос.

  • __FUNCTION__ определяется как строковый литерал, содержащий внешнее имя включающей функции. Макрос определяется только в пределах функции. __FUNCTION__ макрос не разворачивается при использовании /EP или /P параметр компилятора. Пример использования см. в разделе __FUNCDNAME__ макрос.

  • _INTEGRAL_MAX_BITS определенные как целое 64 литеральное значение, максимальный размер (в битах) для целочисленный тип не вектор. Этот макрос определяется всегда.

    // integral_max_bits.cpp  
    #include <stdio.h>  
    int main() {  
       printf("%d\n", _INTEGRAL_MAX_BITS);  
    }  
    
    
  • __INTELLISENSE__ определен как 1 во время компилятора IntelliSense передайте в Интегрированной среде разработки Visual Studio. В противном случае не определено. Этот макрос можно использовать для защиты кода компилятор IntelliSense не понимать и использовать его для переключения между сборки и компилятора IntelliSense. Дополнительные сведения см. в разделе Советы по устранению неполадок для IntelliSense быстродействием.

  • _ISO_VOLATILE определяется как 1, если /volatile:iso задан параметр компилятора. В противном случае не определено.

  • _KERNEL_MODE определяется как 1, если /kernel (Создание двоичного режима ядра) задан параметр компилятора. В противном случае не определено.

  • _M_AMD64 определен как целочисленный литерал, процессоров x64 значение 100 для компиляции. В противном случае не определено.

  • _M_ARM определяется как целочисленное литеральное значение 7 для компиляций, предназначенных для процессоров ARM. В противном случае не определено.

  • _M_ARM_ARMV7VE определяется как 1, если /arch:ARMv7VE задан параметр компилятора для компиляций, предназначенных для процессоров ARM. В противном случае не определено.

  • _M_ARM_FP определяется как значение целочисленного литерала, указывающее, что /arch был задан параметр компилятора, если целевого объекта компиляции для процессоров ARM. В противном случае не определено.

    • В диапазоне 30-39, если не /arch был указан параметр ARM, установлено значение, указывающее, по умолчанию архитектура для ARM (VFPv3).

    • В диапазоне 40-49, если /arch:VFPv4 был установлен.

    • В разделе /arch (ARM) для получения дополнительной информации.

  • _M_ARM64 определен как 1 для компиляций, предназначенных для 64-разрядных процессоров ARM. В противном случае не определено.

  • _M_CEE определяется как 001 Если любой /CLR (компиляция CLR) задан параметр компилятора. В противном случае не определено.

  • _M_CEE_PURE определяется как 001 Если /CLR: pure задан параметр компилятора. В противном случае не определено.

  • _M_CEE_SAFE определяется как 001 Если /CLR: safe задан параметр компилятора. В противном случае не определено.

  • _M_FP_EXCEPT определяется как 1, если /fp: за исключением или /fp: strict задан параметр компилятора. В противном случае не определено.

  • _M_FP_FAST определяется как 1, если /fp: fast задан параметр компилятора. В противном случае не определено.

  • _M_FP_PRECISE определяется как 1, если /fp: точный задан параметр компилятора. В противном случае не определено.

  • _M_FP_STRICT определяется как 1, если /fp: strict задан параметр компилятора. В противном случае не определено.

  • _M_IX86 определен как целочисленный литерал, процессоров x86 значение 600 компиляций. Этот макрос не определен для x64 или целевых объектов компиляции ARM.

  • _M_IX86_FP определяется как значение целочисленного литерала, указывающее /arch параметра компилятора, который был установлен, или значение по умолчанию. Этот макрос определяется всегда, когда целевого объекта компиляции x86 процессора. В противном случае не определено. Если определена, значение равно:

    • 0, если /arch:IA32 был установлен параметр компилятора.

    • 1, если /arch:SSE был установлен параметр компилятора.

    • 2, если /arch:SSE2, /arch: AVX или /arch:AVX2 был установлен параметр компилятора. Это значение используется по умолчанию, если /arch не был указан параметр компилятора. Когда /arch: AVX указан, макрос __AVX__ также определены. Когда /arch:AVX2 указано, как __AVX__ и __AVX2__ также определены.

    • В разделе /arch (x86) Подробнее.

  • _M_X64 определен как целочисленный литерал, процессоров x64 значение 100 для компиляции. В противном случае не определено.

  • _MANAGED определен как 1, если /CLR задан параметр компилятора. В противном случае не определено.

  • _MSC_BUILD определяется как целочисленный литерал, содержащий элемент номер редакции номера версии компилятора. Номер редакции — номер версии разделенного четвертый элемент. Например, если номер версии компилятора Visual C++ 15.00.20706.01 _MSC_BUILD макрос равен 1. Этот макрос определяется всегда.

  • _MSC_EXTENSIONS определяется как 1, если /Ze (включить расширения языка) задан параметр компилятора, который используется по умолчанию. В противном случае не определено.

  • _MSC_FULL_VER определен как целочисленный литерал, кодирует основной, вспомогательной и построения количество элементов номера версии компилятора. Номер версии, разделенного на первый элемент является основной номер, дополнительный номер — второй элемент и номер сборки — третий элемент. Например, если номер версии компилятора Visual C++ 15.00.20706.01 _MSC_FULL_VER макрос принимает значение 150020706. Введите cl /? из командной строки для просмотра номера версии компилятора. Этот макрос определяется всегда.

  • _MSC_VER определяется как целочисленный литерал, кодирует количество элементов основной и дополнительный номера версии компилятора. Основной номер — номер версии, разделенного на первый элемент и дополнительный номер — второй элемент. Например, 17.00.51106.1 номер версии компилятора Visual C++ _MSC_VER макрос возвращает значение 1700. Введите cl /? из командной строки для просмотра номера версии компилятора. Этот макрос определяется всегда.

  • _MSVC_LANG определяется как целочисленный литерал, указывающее стандарта языка C++, предназначенные для компилятора. При компиляции как C++ макрос при целочисленное литеральное значение 201402 /std:c ++ 14 параметр компилятора задается значение, или по умолчанию и задано на более высокий, этот параметр не указан значения при /std:c ++ последнюю задан параметр компилятора. В противном случае — макроса не определено. _MSVC_LANG макрос и /std (укажите Стандартная версия языка) Параметры компилятора, начиная с Visual Studio 2015 г. обновление 3.

  • __MSVC_RUNTIME_CHECKS определяется как 1, если в одном из /RTC задать параметры компилятора. В противном случае не определено.

  • _MT определен как 1, если /MD или/MDd (Многопоточная DLL) или /MT или/MTd указано (многопоточный). В противном случае не определено.

  • _NATIVE_WCHAR_T_DEFINED определяется как 1, если /Zc: задан параметр компилятора. В противном случае не определено.

  • _OPENMP определяется как целого литерала 200203 дату спецификации OpenMP, реализуемой Visual C++, если /OpenMP (Включение поддержки OpenMP 2.0) задан параметр компилятора. В противном случае не определено.

    // _OPENMP_dir.cpp  
    // compile with: /openmp   
    #include <stdio.h>   
    int main() {  
       printf("%d\n", _OPENMP);  
    }  
    
    
  • _PREFAST_ определяется как 1, если / analyze задан параметр компилятора. В противном случае не определено.

  • __TIMESTAMP__ определяется как строковый литерал, содержащий дату и время последнего изменения текущего файла исходного кода, в форме сокращенное, постоянное длину возвращаемых библиотеки времени выполнения C asctime функции, например, Fri 19 Aug 13:32:58 2016. Этот макрос определяется всегда.

  • _VC_NODEFAULTLIB определяется как 1, если /Zl (опустить имя библиотеки по умолчанию) задан параметр компилятора. В противном случае не определено.

  • _WCHAR_T_DEFINED определяется как 1, если значение по умолчанию /Zc: задан параметр компилятора. _WCHAR_T_DEFINED макрос определен, но не имеет значения при /Zc:wchar_t- задан параметр компилятора, и wchar_t определяется в системном файле заголовка, включенном в проект. В противном случае не определено.

  • _WIN32 определенные как 1, если целевого объекта компиляции не ARM 32-разрядной, 64-разрядных ARM, x86, или x 64. В противном случае не определено.

  • _WIN64 определен как 1 при 64-разрядной ARM или x64 целевого объекта компиляции. В противном случае не определено.

  • _WINRT_DLL определен как 1, если скомпилировать как C++ и оба /ZW (компиляция среды выполнения Windows) и /LD или /LDd установлены параметры компилятора. В противном случае не определено.

Макросы препроцессора, используемый для определения версии библиотеки ATL и MFC, не являются предопределенными компилятором. Эти макросы определяются в заголовки, библиотеки, поэтому они не определены в директивах препроцессора до обязательный заголовок.

  • _ATL_VER определен в < atldef.h > как целочисленный литерал, кодирует ATL номер версии.

  • _MFC_VER определен в < afxver_.h > как целочисленный литерал, кодирует номером версии MFC.

Макросы (C/C++)
Операторы препроцессора
Директивы препроцессора

Показ: