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。 |
| _ATL_VER | 定義ATL版本。 在 Visual Studio 2010中,_ATL_VER?定義為0x1000。 |
| _CHAR_UNSIGNED | 默認?char?類型無符號。定義,當?/J?指定。 |
| __CLR_VER | 當應用程序生成的,定義使用的公共語言運行時的版本。返回的值具有以下格式: Mmmbbbbb 其中,
|
| __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_cliprintf("%d\n", __cplusplus_cli);#elseprintf("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 0exampleClass e1(__COUNTER__);// having been referenced, __COUNTER__ is now defined as 1exampleClass e2(__COUNTER__);// __COUNTER__ is now defined as 2exampleClass 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: 2return 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?編譯器選項:
|
| _M_IX86_FP | 擴展到值指示使用了哪個?/arch?編譯器選項:
|
| _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 |
總結
- 上一篇: 魅族 20 系列搭载 Flyme 魔术收
- 下一篇: 《易学C++(第2版)》——导读