VC 預約義宏

列出預約義的 ANSI C和C++ Microsoft實現宏。多線程

編譯器識別預約義的ANSI C宏,而且Microsoft C++實現提供幾個更多。這些宏不帶參數,而且不能重定義。下面列出的某些預約義的宏定義與多個值。請參見下表。有關更多信息。ide

ANSI兼容的預約義宏

函數

說明spa

__DATE__操作系統

當前源文件的生成日期。該日期是窗體 Mmm yyyy的dd的字符串。月份名稱 Mmm 與在庫函數生成相同的日期。TIME.H.聲明的 asctime.net

__FILE__命令行

當前源文件的名稱。__FILE__ 擴展到雙引號括起來的字符串。若要確保文件的完整路徑顯示,請使用 /FC(所診斷源代碼文件的完整路徑)線程

__LINE__翻譯

在當前源文件中的行號。行號是一個十進制整數常數。它能夠更改與 #line 指令。code

__STDC__

指示徹底符合與 ANSI C標準。定義爲整型常數1,僅當提供 /Za 編譯器選擇和不生成C++代碼;不然爲未定義。

__TIME__

當前源文件的最新生成時。時間是窗體 hh: 爲: ss的字符串。

__TIMESTAMP__

當前源文件的上次修改日期和時間,是以字符串形式 ddd Mmm日期格式: 爲: yyyy的ss,ddd 是縮寫的星期和 日期 爲從1的整數爲31。

特定於Microsoft的預約義宏

說明

_ATL_VER

定義ATL版本。

在 Visual Studio 2010中,_ATL_VER 定義爲0x1000。

_CHAR_UNSIGNED

默認 char 類型無符號。定義,當 /J 指定。

__CLR_VER

當應用程序生成的,定義使用的公共語言運行時的版本。返回的值具備如下格式:

Mmmbbbbb

其中,

  • M 是運行時的主版本

  • mm 是運行時的最低版本

  • bbbbb 是生成號。

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

__cplusplus_cli

定義,在使用編譯 /clr/clr:pure或 /clr:safe__cplusplus_cli的值爲200406。__cplusplus_cli實際上就是該翻譯單元中。

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

__COUNTER__

用於源文件的源文件或包含的標頭時,擴展爲從0開始並提升x 1的整數。當您使用預編譯標頭時,__COUNTER__ 確保其狀態。

下面的示例使用 __COUNTER__ 分配惟一標識符到同一類型的三個不一樣的對象。

首先,假定下面的類定義。構造函數採用整數做爲參數。

C++
// initialize object with a read-only unique ID
exampleClass::exampleClass(int nID)
{
	m_nID = nID;
}

int exampleClass::GetID()
{
	return m_nID;
}


在主,應用程序聲明類型 exampleClass三個對象,使用 __COUNTER__ 做爲惟一標識符參數。

C++
// Demonstration of __COUNTER__, assigns unique identifiers to
//  different objects of the same type
int main(int argc, char** argv)
{
	// __COUNTER__ is initially defined as 0
	exampleClass e1(__COUNTER__);

	// having been referenced, __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

定義僅適用於C++程序。

_CPPRTTI

定義爲代碼編譯 /GR ("啓用運行時類型信息)。

_CPPUNWIND

定義爲代碼編譯 /GX ("啓用異常處理)。

_DEBUG

定義,在使用編譯 /LDd/MDd和 /MTd

_DLL

定義,當 /MD或/MDd (多線程的DLL)指定。

__FUNCDNAME__

僅在函數中有效。定義封閉函數的 修飾名 做爲字符串。

若是您使用的是,/EP 或 /P 編譯器選項,__FUNCDNAME__ 不展開。

下面的示例使用 __FUNCDNAME__、__FUNCSIG__和 __FUNCTION__ 宏顯示函數信息。

C++
// 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__

僅在函數中有效。定義封閉函數的簽名爲字符串。

若是您使用的是,/EP 或 /P 編譯器選項,__FUNCSIG__ 不展開。

默認狀況下在64位操做系統上,調用約定是 __cdecl。

有關示例,請參見 __FUNCDNAME__。

__FUNCTION__

僅在函數中有效。定義封閉函數的修飾名稱做爲字符串。

若是您使用的是,/EP 或 /P 編譯器選項,__FUNCTION__ 不展開。

有關示例,請參見 __FUNCDNAME__。

_INTEGRAL_MAX_BITS

報告最大大小(以位)一個整型。

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

_M_ALPHA

定義爲DEC APPHA的平臺(再也不支持)。

_M_AMD64

定義爲x64處理器。

_M_CEE

定義了例如使用 /clr 的生成(/clr:oldSyntax/clr:safe的全部窗體,)。

_M_CEE_PURE

定義用於 /clr:pure的生成。

_M_CEE_SAFE

定義用於 /clr:safe的生成。

_M_IX86

定義爲x86處理器。請參見下面 _M_IX86的值 表有關更多信息。對於x64處理器定義。

_M_IA64

定義爲 Itanium 處理器家族(ipf) 64位處理器。

_M_ARM_FP

擴展到值指示使用了哪一個 /arch 編譯器選項:

  • 在範圍30-39,若是 /arch ARM選項未指定,ARM的默認結構使用了一個(VFPv3)。

  • 在範圍40-49,若是使用了 /arch:VFPv4

  • 有關更多信息,請參見/arch (x86)

_M_IX86_FP

擴展到值指示使用了哪一個 /arch 編譯器選項:

  • 0,若是使用了 /arch:IA32

  • 1,若是使用了 /arch:SSE

  • 2,若是使用了 /arch:SSE2/arch,若是未指定,此值是默認值。

  • 有關更多信息,請參見/arch (x86)

_M_MPPC

定義了Power Macintosh平臺(再也不支持)。

_M_MRX000

定義了MIPS平臺(再也不支持)。

_M_PPC

定義了PowerPC平臺(再也不支持)。

_M_X64

定義爲x64處理器。

_MANAGED

定義爲1 /clr 指定。

_MFC_VER

定義MFC版本。例如,在 Visual Studio 2010中,_MFC_VER 定義爲0x0A00。

_MSC_BUILD

計算爲編譯器的版本號的版本號元素。版本號爲句點分隔的版本號的第四個元素。例如,所以,若是Visual C++編譯器的版本號爲15.00.20706.01,_MSC_BUILD 宏計算結果爲1。

_MSC_EXTENSIONS

此宏定義,在使用編譯 /Ze 編譯器選項時(默認值)。其值,那麼,當定義,爲1。

_MSC_FULL_VER

計算爲編譯器的版本號的major、minor和生成號元素。專業數字爲句點分隔的版本號的第一個元素,該次版本號是第二個元素,而且,生成號是第三個元素。例如,所以,若是Visual C++編譯器的版本號爲15.00.20706.01,_MSC_FULL_VER 宏計算結果爲150020706。鍵入 cl /? 在命令行上查看編譯器的版本號。

_MSC_VER

計算爲編譯器的主版本號和次版本號元素。專業數字爲句點分隔的版本號的第一個元素,而且該次版本號是第二個元素。

例如,所以,若是Visual C++編譯器的版本號爲15.00.20706.01,_MSC_VER 宏計算結果爲1500。

在 Visual Studio 2010中,_MSC_VER 定義爲1600。

__MSVC_RUNTIME_CHECKS

定義,在一個 /RTC 編譯器選項指定。

_MT

定義,當 /MD或/MDd (多線程的DLL)或 /MT或/MTd (多線程)指定。

_NATIVE_WCHAR_T_DEFINED

定義,當使用 /Zc: wchar_t

_OPENMP

定義,當使用/openmp進行編譯時,返回表示OpenMP規範日期的整數實現由Visual C++。

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

_VC_NODEFAULTLIB

定義,當使用 /Zl ;請參見 /Zl(省略默認庫名) 有關更多信息。

_WCHAR_T_DEFINED

定義,當使用 /Zc: wchar_t,或者wchar_t在項目中的系統標頭文件中定義的。

_WIN32

定義爲Win32和警告的應用程序。始終定義。

_WIN64

定義爲Win64應用程序。

_Wp64

定義,指定 /Wp64時。

以下表所示,編譯器生成反映指定的處理器選項的預處理器標識符的值。

_M_IX86的值

選項在開發環境中

命令行選項

獲得的值。

組合

/GB

_M_IX86 = 600 (默認值。未來的編譯器會發出一個不一樣的值反映主導處理器。)

Pentium

/G5

_M_IX86 = 500

Pentium Pro、Pentium II和Pentium III

/G6

_M_IX86 = 600

80386

/G3

_M_IX86 = 300

80486

/G4

_M_IX86 = 400

相關文章
相關標籤/搜索