VC 預定義宏


列出預定義的 ANSI C和C++ Microsoft實現宏。

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

ANSI兼容的預定義宏

說明

__DATE__

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

__FILE__

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

__LINE__

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

__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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM