Macros predefinidas

Lists the predefined ANSI/ISO C99 and Microsoft C++ implementation preprocessor macros.

O compilador reconhece macros de pré-processador ANSI/ISO C99 C predefinidas e a implementação do Microsoft C++ fornece muitas outras. Essas macros de pré-processador não usam argumentos e não podem ser redefinidas. Algumas das macros predefinidas listadas neste artigo são definidas com vários valores.

Macros predefinidas compatíveis com ANSI

Macro

Descrição

__DATE__

A data de compilação do arquivo de origem atual. A data é uma cadeia de caracteres literal no formato Mmm dd yyyy. O nome do mês Mmm é igual para as datas geradas pela função de biblioteca asctime, declarada em TIME.H.

__FILE__

O nome do arquivo de origem atual. __FILE__ expande para uma cadeia de caracteres literal. Para garantir que o caminho completo para o arquivo é exibido, use /FC (caminho completo do arquivo de código-fonte no diagnóstico).

__func__

Retorna o nome qualificado e acrescido da função como uma matriz de char.

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

__LINE__

O número da linha no arquivo de origem atual. O número da linha é um literal de inteiro decimal. Pode ser alterada com uma política de #line.

__STDC__

Indica a conformidade com o padrão ANSI/ISO C99. Definido como if inteiro constante literal 1 somente o /Za recebe o opção de compilador e você não está compilando o código C++; caso contrário, será indefinido.

__TIME__

A hora de compilação mais recente do arquivo de origem atual. A hora é uma cadeia de caracteres literal do formato hh:mm:ss.

__TIMESTAMP__

A data e hora da modificação mais recente do arquivo de origem atual, expressa como um literal de cadeia de caracteres no formato Ddd Mmm Date hh:mm:ss yyyy, onde Ddd é o dia da semana abreviado e Date é um inteiro de 1 a 31.

Macros predefinidos específicos da Microsoft

Macro

Descrição

_ATL_VER

Define a versão ATL, codificada como um literal inteiro.

__AVX__

Definido quando /arch:AVX ou /arch:AVX2 é especificado.

__AVX2__

Definido quando /arch:AVX2 é especificado.

_CHAR_UNSIGNED

O tipo char padrão é sem sinal. Definido quando /J é especificado.

__CLR_VER

Define a versão do Common Language Runtime usado quando o aplicativo foi compilado. O valor retornado é um literal inteiro codificado no seguinte formato:

Mmmbbbbb

onde,

  • M é a versão principal do tempo de execução

  • mm é a versão secundária do tempo de execução

  • bbbbb é o número de compilação.

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

__cplusplus_cli

Definido quando você compila com /clr, /clr:pure ou /clr:safe. Valor de __cplusplus_cli é o 200406 literal de inteiro. __cplusplus_cli é aplicado em toda a unidade de conversão.

// 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

Definido quando você usa a opção /ZW para compilar. O valor de cplusplus_winrt é o 201009 literal de inteiro.

__COUNTER__

Expande para um número inteiro literal começando com 0 e acrescenta 1 sempre que ele é usado em um arquivo de origem ou cabeçalhos do arquivo de origem incluídos. __COUNTER__ lembra seu estado quando você usa cabeçalhos pré-compilados.

O exemplo a seguir usa __COUNTER__ para atribuir identificadores exclusivos para três objetos diferentes do mesmo tipo.

Primeiro, assume a definição de classe a seguir. O construtor aceita um inteiro como um parâmetro.

No principal, o aplicativo declara três objetos do tipo exampleClass, usando __COUNTER__ como o parâmetro identificador exclusivo.

__cplusplus

Definido para programas do C++ somente.

_CPPRTTI

Definido para o código compilado com /GR (Habilita Informação de Tipo em Tempo de Execução).

_CPPUNWIND

Definido para o código compilado, usando uma do /EH (modelo de tratamento de exceções) sinalizadores.

_DEBUG

Definido quando você compila com /LDd, /MDd e /MTd.

_DLL

Definido quando /MD ou /MDd (Multithreaded DLL) é especificado.

__FUNCDNAME__

Válido somente em uma função. Define o nome decorado da função como um literal de cadeia de caracteres.

__FUNCDNAME__ não é expandido se você usar a opção do compilador /EP ou /P.

O exemplo a seguir usa as macros __FUNCDNAME__, __FUNCSIG__ e __FUNCTION__ para exibir informações de função.

__FUNCSIG__

Válido somente em uma função. Define a assinatura da função como um literal de cadeia de caracteres.

__FUNCSIG__ não é expandido se você usar a opção do compilador /EP ou /P.

Em um sistema operacional de 64 bits, a convenção de chamada é __cdecl por padrão.

Para ver um exemplo, consulte __FUNCDNAME__.

__FUNCTION__

Válido somente em uma função. Define o nome não decorado da função como um literal de cadeia de caracteres.

__FUNCTION__ não é expandido se você usar a opção do compilador /EP ou /P.

Para ver um exemplo, consulte __FUNCDNAME__.

_INTEGRAL_MAX_BITS

Reporta o tamanho máximo (em bits) para um tipo integral como um literal inteiro.

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

_M_AMD64

Definido para compilações destinados x64 processadores.

_M_ARM

Definido para compilações destinados a processadores ARM.

_M_CEE

Definido para uma compilação que usa qualquer forma de /clr (/clr:oldSyntax, /clr:safe, por exemplo).

_M_CEE_PURE

Definido para uma compilação que usa /clr:pure.

_M_CEE_SAFE

Definido para uma compilação que usa /clr:safe.

_M_IX86

Definido para compilações destinados x86 processadores. Isso não é definido para processadores x64.

_M_ARM_FP

Expande para um valor literal inteiro indicando qual /arch opção de compilador foi usada:

  • No intervalo 30-39, se nenhuma opção ARM /arch foi especificada, foi usada a indicação de arquitetura padrão para ARM (VFPv3).

  • No intervalo 40-49, se /arch:VFPv4 foi usado.

  • Consulte /arch (x86) para obter mais informações.

_M_IX86_FP

Expande para um valor literal inteiro indicando qual /arch opção de compilador foi usada:

  • 0 se /arch:IA32 foi usado.

  • 1 se /arch:SSE foi usado.

  • 2 se /arch:SSE2, /arch:AVX ou /arch:AVX2 foi usado. Esse valor será o padrão se /arch não tiver sido especificado. Quando /arch:AVX é especificado, a macro __AVX__ também é definida. Quando /arch:AVX2 é especificado, __AVX__ e __AVX2__ também são definidos.

  • Consulte /arch (x86) para obter mais informações.

_M_X64

Definido para compilações destinados x64 processadores.

_MANAGED

Definido como 1 quando /clr for especificado.

_MFC_VER

Define a versão MFC, codificada como um literal inteiro.

_MSC_BUILD

É avaliada como um inteiro que contém o componente de número de revisão do número de versão do compilador literal. O número de revisão é o quarto componente do número de versão delimitado por período. Por exemplo, se o número de versão do compilador do Visual C++ for 15.00.20706.01, a macro _MSC_BUILD será avaliada em 1.

_MSC_EXTENSIONS

Essa macro é definida quando você compila com a opção do compilador /Ze (padrão). Seu valor, quando definido, é 1.

_MSC_FULL_VER

É avaliada como um literal de inteiro que codifica o maior, menor e criar componentes de número do número de versão do compilador. O número principal é o primeiro componente do número de versão delimitado por ponto, o número secundário é o segundo componente e o número de compilação é o terceiro componente. Por exemplo, se o número de versão do compilador do Visual C++ for 15.00.20706.01, a macro _MSC_FULL_VER será avaliada em 150020706. Digite cl /? na linha de comando para exibir o número de versão do compilador.

_MSC_VER

É avaliada como um inteiro literal que codifica os componentes de número principais e secundárias do número de versão do compilador. O número principal é o primeiro componente do número de versão delimitado por ponto e o número secundário é o segundo componente.

Por exemplo, se o número de versão do compilador do Visual C++ for 17.00.51106.1, a macro _MSC_VER será avaliada em 1700. Digite cl /? na linha de comando para exibir o número de versão do compilador.

__MSVC_RUNTIME_CHECKS

Definido quando uma das opções do compilador de /RTC é especificada.

_MT

Definido quando /MD ou /MDd (Multithreaded DLL) ou /MT ou /MTd (Multithreaded) são especificados.

_NATIVE_WCHAR_T_DEFINED

Definido quando /Zc:wchar_t é usado.

_OPENMP

Definido ao compilar com /openmp, é avaliada como um inteiro literal que representa a data da especificação de OpenMP implementada pelo Visual C++.

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

_VC_NODEFAULTLIB

Definido quando /Zl é usada, consulte /Zl (omitir nome da biblioteca padrão) para obter mais informações.

_WCHAR_T_DEFINED

Definido quando /Zc:wchar_t é usado ou se wchar_t é definido em um arquivo de cabeçalho do sistema incluído em seu projeto.

_WIN32

Definido para aplicativos do Win32 e Win64. Sempre definido.

_WIN64

Definido para aplicativos do Win64.

Consulte também

Referência

Macros (C/C++)

Operadores de pré-processador

Diretivas de pré-processador