Condividi tramite


Macro predefinite

Elenca le macro predefinite del preprocessore di implementazione ANSI/ISO C99 e Microsoft C++.

Il compilatore riconosce le macro predefinite del preprocessore ANSI/ISO C99 C e l'implementazione Microsoft C++ ne fornisce diverse altre. Queste macro del preprocessore non accettano argomenti e non possono essere ridefinite. Alcune delle macro predefinite elencate in questo articolo vengono definite con più valori.

Macro predefinite conformi a ANSI

Macro

Descrizione

__DATE__

Data di compilazione del file di origine corrente. La data è un valore letterale stringa in formato Mmm gg aaaa. Il nome del mese Mmm è identico a quello delle date generate dalla funzione di libreria asctime dichiarata in TIME.H.

__FILE__

Nome del file di origine corrente. __FILE__ si espande in un valore letterale stringa. Per assicurarsi che venga visualizzato il percorso completo del file, usare /FC (Percorso completo del file di codice sorgente nella diagnostica).

__func__

Restituisce il nome non qualificato e non decorato della funzione contenitore come matrice di char.

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

__LINE__

Numero di riga nel file di origine corrente. Il numero di riga è un valore letterale Integer decimale. Può essere modificato con una direttiva #line.

__STDC__

Indica la conformità allo standard ANSI/ISO C99. Definito come costante del valore letterale Integer 1 solo se l'opzione del compilatore /Za è specificata e non si sta compilando un codice C++. In caso contrario, non è definito.

__TIME__

Ora di compilazione più recente del file di origine corrente. L'ora è un valore letterale stringa in formato hh:mm:ss.

__TIMESTAMP__

Data e ora dell'ultima modifica del file di origine corrente, espresse come valore letterale stringa in formato Ggg Mmm Data hh:mm:ss yyyy, dove Ggg è il giorno della settimana abbreviato e Data è un numero intero compreso tra 1 e 31.

Macro predefinite specifiche di Microsoft

Macro

Descrizione

_ATL_VER

Definisce la versione ATL, codificata come valore letterale Integer.

__AVX__

Definita se è specificata l'opzione /arch:AVX o /arch:AVX2.

__AVX2__

Definita se è specificata l'opzione /arch:AVX2.

_CHAR_UNSIGNED

Il tipo char predefinito è senza segno. Definito se è specificata l'opzione /J.

__CLR_VER

Definisce la versione di Common Language Runtime usata al momento della compilazione dell'applicazione. Il valore restituito è un valore letterale Integer codificato nel seguente formato:

Mmmbbbbb

dove

  • M è il numero di versione principale del runtime

  • mm è il numero di versione secondario del runtime

  • bbbbb è il numero di build.

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

__cplusplus_cli

Definita quando si esegue la compilazione con /clr, /clr:pure o /clr:safe. Il valore di __cplusplus_cli è il valore letterale Integer 200406. __cplusplus_cli è attivo nell'unità di conversione.

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

Definita quando si usa l'opzione di compilazione /ZW. Il valore di __cplusplus_winrt è il valore letterale Integer 201009.

__COUNTER__

Si espande in un valore letterale Integer che inizia con 0 e viene incrementato di 1 unità ogni volta che viene usato in un file di origine o viene incluso nelle intestazioni del file di origine. __COUNTER__ memorizza il rispettivo stato quando si usano intestazioni precompilate.

Nell'esempio seguente viene usato __COUNTER__ per assegnare identificatori univoci a tre oggetti diversi dello stesso tipo.

Si prenda innanzitutto in considerazione la seguente definizione di classe. Il costruttore accetta un Integer come parametro.

In Main l'applicazione dichiara tre oggetti di tipo exampleClass, usando __COUNTER__ come parametro dell'identificatore univoco.

__cplusplus

Definita solo per i programmi C++.

_CPPRTTI

Definita per il codice compilato con /GR (Abilita informazioni sui tipi in fase di esecuzione).

_CPPUNWIND

Definita per il codice compilato usando uno dei flag di /EH (Modello di gestione delle eccezioni).

_DEBUG

Definita quando si esegue la compilazione con /LDd, /MDd e /MTd.

_DLL

Definita quando vengono specificate le opzioni /MD o /MDd (DLL con multithreading).

__FUNCDNAME__

Valida solo in una funzione. Definisce il nome decorato della funzione contenitore come valore letterale stringa.

__FUNCDNAME__ non viene espansa se si usano le opzioni del compilatore /EP o /P.

Nell'esempio seguente vengono usate le macro __FUNCDNAME__, __FUNCSIG__ e __FUNCTION__ per visualizzare le informazioni sulle funzioni.

__FUNCSIG__

Valida solo in una funzione. Definisce la firma della funzione contenitore come valore letterale stringa.

__FUNCSIG__ non viene espansa se si usano le opzioni del compilatore /EP o /P.

In un sistema operativo a 64 bit, la convenzione di chiamata predefinita è __cdecl.

Per un esempio, vedere __FUNCDNAME__.

__FUNCTION__

Valida solo in una funzione. Definisce il nome non decorato della funzione contenitore come valore letterale stringa.

__FUNCTION__ non viene espansa se si usano le opzioni del compilatore /EP o /P.

Per un esempio, vedere __FUNCDNAME__.

_INTEGRAL_MAX_BITS

Indica la dimensione massima (in bit) per un tipo integrale come valore letterale Integer.

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

_M_AMD64

Definito per le compilazioni destinate a processori x64.

_M_ARM

Definito per le compilazioni destinate a processori ARM.

_M_CEE

Definita per una compilazione eseguita con qualsiasi formato dell'opzione /clr (ad esempio /clr:oldSyntax, /clr:safe).

_M_CEE_PURE

Definita per una compilazione eseguita con l'opzione /clr:pure.

_M_CEE_SAFE

Definita per una compilazione eseguita con l'opzione /clr:safe.

_M_IX86

Definito per le compilazioni destinate a processori x86. Non è definita per i processori x64.

_M_ARM_FP

Si espande in un valore letterale Integer che indica quale opzione del compilatore /arch è stata usata:

  • Nell'intervallo compreso tra 30 e 39 se non è stata specificata alcuna opzione ARM /arch; questo indica che è stata usata l'architettura predefinita di ARM (VFPv3).

  • Nell'intervallo compreso tra 40 e 49 se è stata usata l'opzione /arch:VFPv4.

  • Per ulteriori informazioni, vedi /arch (x86).

_M_IX86_FP

Si espande in un valore letterale Integer che indica quale opzione del compilatore /arch è stata usata:

  • 0 se è stata usata l'opzione /arch:IA32.

  • 1 se è stata usata l'opzione /arch:SSE.

  • 2 se è stata usata l'opzione /arch:SSE2, /arch:AVX o /arch:AVX2. Si tratta del valore predefinito se non è stata specificata l'opzione /arch. Se è specificata l'opzione /arch:AVX, viene definita anche la macro __AVX__. Se è specificata l'opzione /arch:AVX2, vengono definite anche __AVX__ e __AVX2__.

  • Per ulteriori informazioni, vedi /arch (x86).

_M_X64

Definito per le compilazioni destinate a processori x64.

_MANAGED

Definita come 1 se è specificata l'opzione /clr.

_MFC_VER

Definisce la versione MFC, codificata come valore letterale Integer.

_MSC_BUILD

Restituisce un valore letterale Integer che contiene il componente che specifica il numero di revisione del numero di versione del compilatore. Il numero di revisione è il quarto componente del numero di versione separato dal punto. Ad esempio, se il numero di versione del compilatore di Visual C++ è 15.00.20706.01, la macro _MSC_BUILD restituisce 1.

_MSC_EXTENSIONS

Questa macro viene definita quando si usa l'opzione del compilatore /Ze (impostazione predefinita). Il valore di tale macro, una volta definita, è 1.

_MSC_FULL_VER

Restituisce un valore letterale Integer che contiene i componenti che specificano il numero principale, il numero secondario e il numero di build del numero di versione del compilatore. Il numero principale è il primo componente del numero di versione separato dal punto, mentre il numero secondario e il numero di build costituiscono rispettivamente il secondo e il terzo componente. Ad esempio, se il numero di versione del compilatore di Visual C++ è 15.00.20706.01, la macro _MSC_FULL_VER restituisce 150020706. Digitare cl /? nella riga di comando per visualizzare il numero di versione del compilatore.

_MSC_VER

Restituisce un valore letterale Integer che contiene i componenti che specificano il numero principale e il numero secondario del numero di versione del compilatore. Il numero principale è il primo componente del numero di versione separato dal punto e il numero secondario è il secondo componente.

Ad esempio, se il numero di versione del compilatore di Visual C++ è 17.00.51106.1, la macro _MSC_VER restituisce 1700. Digitare cl /? nella riga di comando per visualizzare il numero di versione del compilatore.

__MSVC_RUNTIME_CHECKS

Definita se viene specificata una delle opzioni del compilatore /RTC.

_MT

Definita se sono specificate le opzioni /MD o /MDd (DLL con multithreading) o le opzioni /MT o /MTd (Multithreading).

_NATIVE_WCHAR_T_DEFINED

Definita quando viene usata l'opzione /Zc:wchar_t.

_OPENMP

Definita se la compilazione con /openmp restituisce un valore letterale Integer che rappresenta la data della specifica OpenMP implementata da Visual C++.

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

_VC_NODEFAULTLIB

Definita quando viene usata l'opzione /Zl. Per altre informazioni, vedere /Zl (Omette il nome della libreria predefinita).

_WCHAR_T_DEFINED

Definita quando viene usata l'opzione /Zc:wchar_t oppure se wchar_t viene definito in un file di intestazione di sistema incluso nel progetto.

_WIN32

Definita per le applicazioni per Win32 e Win64. Sempre definita.

_WIN64

Definita per le applicazioni per Win64.

Vedere anche

Riferimenti

Macro (C/C++)

Operatori del preprocessore

Direttive per il preprocessore