Using Microsoft-specific predefined Preprocessor macros

Source: Internet
Author: User
Using Microsoft-specific predefined Preprocessor macros

A sample function that uses ANSI-compliant predefined Preprocessor macros:

bool CPreprocessingDlg::UseMicrosoftSpecificPredefinedMacros(void){    // Using Microsoft-Specific Predefined Preprocessor Macros    // Ref: http://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx    TCHAR buffer[MAX_PATH];    CString m_strOutput;    m_strOutput += "\r\n\r\n";    m_strOutput += "-- Microsoft-Specific Predefined Macros --";    // _ATL_VER - Defines the ATL version.    m_strOutput += "\r\n";    swprintf_s(buffer, MAX_PATH, TEXT("ATL Version: 0x%0.4X"), _ATL_VER);    m_strOutput += buffer;    // _CHAR_UNSIGNED - Default char type is unsigned. Defined when /J is specified.    m_strOutput += "\r\n";    m_strOutput += "Default char Type Is unsigned [_CHAR_UNSIGNED]: ";#ifdef _CHAR_UNSIGNED    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _CHAR_UNSIGNED);#else    swprintf_s(buffer, MAX_PATH, TEXT("NO"));#endif    m_strOutput += buffer;    // __CLR_VER - Defines the version of the common language runtime used    // when the application was compiled. The value returned will be in    // the following format: Mmmbbbbb    // where,    // M is the major version of the runtime.    // mm is the minor version of the runtime.    // bbbbb is the build number.    m_strOutput += "\r\n";    m_strOutput += "Common Language Runtime Version [__CLR_VER]: ";#ifdef __CLR_VER    swprintf_s(buffer, MAX_PATH, TEXT("%s"), __CLR_VER);#else    swprintf_s(buffer, MAX_PATH, TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // __cplusplus_cli - Defined when compiling with /clr, /clr:pure, or /clr:safe.    // Value of __cplusplus_cli is 200406.    // __cplusplus_cli is in effect throughout the translation unit.    m_strOutput += "\r\n";    m_strOutput += "__cplusplus_cli: ";#ifdef __cplusplus_cli    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), __cplusplus_cli);#else    swprintf_s(buffer, MAX_PATH, TEXT("NO"));#endif    m_strOutput += buffer;    // __cplusplus - Defined for C++ programs only.    m_strOutput += "\r\n";    m_strOutput += "C++ Program [__cplusplus]: ";#ifdef __cplusplus    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), __cplusplus);#else    swprintf_s(buffer, MAX_PATH, TEXT("NO"));#endif    m_strOutput += buffer;    // _CPPLIB_VER - Defined if you include any of the C++ Standard Library headers.    // Reports which version of the Dinkumware header files are present.    m_strOutput += "\r\n";    m_strOutput += "C++ Standard Library Header Version [_CPPLIB_VER]: ";#ifdef _CPPLIB_VER    swprintf_s(buffer, MAX_PATH, TEXT("%s"), _CPPLIB_VER);#else    swprintf_s(buffer, MAX_PATH, TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // _CPPRTTI - Defined for code compiled with /GR (Enable Run-Time Type Information)    m_strOutput += "\r\n";    m_strOutput += "Enable Run-Time Type Information [_CPPRTTI]: ";#ifdef _CPPRTTI    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _CPPRTTI);#else    swprintf_s(buffer, MAX_PATH, TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // _CPPUNWIND - Defined for code compiled with /GX (Enable Exception Handling).    m_strOutput += "\r\n";    m_strOutput += "Enable Exception Handling [_CPPUNWIND]: ";#ifdef _CPPUNWIND    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _CPPUNWIND);#else    swprintf_s(buffer, MAX_PATH, TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // _DEBUG - Defined when compiling with /LDd, /MDd, and /MTd.    m_strOutput += "\r\n";    m_strOutput += "Debug Mode [_DEBUG]: ";#ifdef _DEBUG    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _DEBUG);#else    swprintf_s(buffer, MAX_PATH, TEXT("NO"));#endif    m_strOutput += buffer;    // _DLL - Defined when /MD or /MDd (Multithread DLL) is specified.    m_strOutput += "\r\n";    m_strOutput += "Multithread DLL [_DLL]: ";#ifdef _DLL    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _DLL);#else    swprintf_s(buffer, MAX_PATH, TEXT("NO"));#endif    m_strOutput += buffer;    // __FUNCDNAME__ - Valid only within a function and returns the decorated    // name of the enclosing function (as a string). __FUNCDNAME__ is not    // expanded if you use the /EP or /P compiler option.    m_strOutput += "\r\n";    m_strOutput += "Function name (decorated) [__FUNCDNAME__]: ";#ifdef __FUNCDNAME__    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT(__FUNCDNAME__));#else    swprintf_s(buffer, MAX_PATH, TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // __FUNCSIG__ - Valid only within a function and returns the signature of the    // enclosing function (as a string). __FUNCSIG__ is not expanded if you use the    // /EP or /P compiler option.    m_strOutput += "\r\n";    m_strOutput += "Function signature [__FUNCSIG__]: ";#ifdef __FUNCSIG__    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT(__FUNCSIG__));#else    swprintf_s(buffer, MAX_PATH, TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // __FUNCTION__ - Valid only within a function and returns the undecorated name of the enclosing    // function (as a string). __FUNCTION__ is not expanded if you use the /EP or /P    // compiler option.    m_strOutput += "\r\n";    m_strOutput += "Function name [__FUNCTION__]: ";#ifdef __FUNCTION__    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT(__FUNCTION__));#else    swprintf_s(buffer, MAX_PATH, TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // _INTEGRAL_MAX_BITS - Reports the maximum size (in bits) for an integral type.    m_strOutput += "\r\n";    m_strOutput += "Integral type maximum size (in bits) [_INTEGRAL_MAX_BITS]: ";#ifdef _INTEGRAL_MAX_BITS    swprintf_s(buffer, MAX_PATH, TEXT("%d"), _INTEGRAL_MAX_BITS);#else    swprintf_s(buffer, MAX_PATH, TEXT("Undefined"));#endif    m_strOutput += buffer;    // _M_ALPHA - Defined for DEC ALPHA platforms. It is defined as 1 by the ALPHA compiler, and    // it is not defined if another compiler is used.    m_strOutput += "\r\n";    m_strOutput += "DEC ALPHA Platform [_M_ALPHA]: ";#ifdef _M_ALPHA    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _M_ALPHA);#else    swprintf_s(buffer, MAX_PATH, TEXT("NO"));#endif    m_strOutput += buffer;    // _M_CEE - Defined for a compilation that uses any form of /clr (/clr:oldSyntax, /clr:safe,    // for example).    m_strOutput += "\r\n";    m_strOutput += "Common Language Runtime Compilation [_M_CEE]: ";#ifdef _M_CEE    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _M_CEE);#else    swprintf_s(buffer, MAX_PATH, TEXT("NO"));#endif    m_strOutput += buffer;    // _M_CEE_PURE - Defined for a compilation that uses /clr:pure.    m_strOutput += "\r\n";    m_strOutput += "Common Language Runtime Pure Compilation [_M_CEE_PURE]: ";#ifdef _M_CEE_PURE    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _M_CEE_PURE);#else    swprintf_s(buffer, MAX_PATH, TEXT("NO"));#endif    m_strOutput += buffer;    // _M_CEE_SAFE - Defined for a compilation that uses /clr:safe.    m_strOutput += "\r\n";    m_strOutput += "Common Language Runtime Safe Compilation [_M_CEE_SAFE]: ";#ifdef _M_CEE_SAFE    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _M_CEE_SAFE);#else    swprintf_s(buffer, MAX_PATH, TEXT("NO"));#endif    m_strOutput += buffer;    // _M_IX86 - Defined for x86 processors. See Values for _M_IX86 for more details.    // Blend: /GB: _M_IX86 = 600 (Default. Future compilers will emit a different value to reflect the dominant processor.)    // Pentium: /G5: _M_IX86 = 500    // Pentium Pro, Pentium II, and Pentium III: /G6: _M_IX86 = 600    // 80386: /G3: _M_IX86 = 300    // 80486: /G4: _M_IX86 = 400    m_strOutput += "\r\n";    m_strOutput += "Minimum CPU Architecture [_M_IX86]: ";#ifdef _M_IX86    if (600 == _M_IX86)        swprintf_s(buffer, MAX_PATH, TEXT("%d - Blend (/GB) or Pentium Pro, Pentium II, Pentium III (/G6)"), _M_IX86);    else if (500 == _M_IX86)        swprintf_s(buffer, MAX_PATH, TEXT("%d - Pentium (/G5)"), _M_IX86);    else if (300 == _M_IX86)        swprintf_s(buffer, MAX_PATH, TEXT("%d - 80386 (/G3)"), _M_IX86);    else if (400 == _M_IX86)        swprintf_s(buffer, MAX_PATH, TEXT("%d - 80486 (/G4)"), _M_IX86);    else        swprintf_s(buffer, MAX_PATH, TEXT("%d - Unknown"), _M_IX86);#else    swprintf_s(buffer, MAX_PATH, TEXT("Undefined"));#endif    m_strOutput += buffer;    // _M_IA64 - Defined for Itanium Processor Family 64-bit processors.    m_strOutput += "\r\n";    m_strOutput += "Itanium Processor Family 64-bit [_M_IA64]: ";#ifdef _M_IA64    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _M_IA64);#else    swprintf_s(buffer, MAX_PATH, TEXT("NO"));#endif    m_strOutput += buffer;    // _M_IX86_FP - Expands to a value indicating which /arch compiler option was used:    // 0 if /arch was not used.    // 1 if /arch:SSE was used.    // 2 if /arch:SSE2 was used.    m_strOutput += "\r\n";    m_strOutput += "Minimum CPU Architecture [_M_IX86_FP]: ";#ifdef _M_IX86_FP    if (0 == _M_IX86_FP)        swprintf_s(buffer, MAX_PATH, TEXT("%d - %s"), _M_IX86_FP, TEXT("NO Streaming SIMD Extensions"));    else if (1 == _M_IX86_FP)        swprintf_s(buffer, MAX_PATH, TEXT("%d - %s"), _M_IX86_FP, TEXT("Streaming SIMD Extensions (/arch:SSE)"));    else if (2 == _M_IX86_FP)        swprintf_s(buffer, MAX_PATH, TEXT("%d - %s"), _M_IX86_FP, TEXT("Streaming SIMD Extensions 2 (/arch:SSE2)"));    else        swprintf_s(buffer, MAX_PATH, TEXT("%d - %s"), _M_IX86_FP, TEXT("UNKNOWN"));#else    swprintf_s(buffer, MAX_PATH, TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // Defined for Power Macintosh platforms (no longer supported).    m_strOutput += "\r\n";    m_strOutput += "Power Macintosh Platform [_M_MPPC]: ";#ifdef _M_MPPC    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _M_MPPC);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // Defined for MIPS platforms (no longer supported).    m_strOutput += "\r\n";    m_strOutput += "MIPS Platform (_M_MRX000): ";#ifdef _M_MRX000    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _M_MRX000);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // Defined for PowerPC platforms (no longer supported).    m_strOutput += "\r\n";    m_strOutput += "PowerPC Platform [_M_PPC]: ";#ifdef _M_PPC    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _M_PPC);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // Defined for x64 processors.    m_strOutput += "\r\n";    m_strOutput += "x64 Platform [_M_X64]: ";#ifdef _M_X64    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _M_X64);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // _MANAGED = Defined to be 1 when /clr is specified.    m_strOutput += "\r\n";    m_strOutput += "Managed Code [_MANAGED]: ";#ifdef _MANAGED    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _MANAGED);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // _MFC_VER - Defines the MFC version. For example, 0x0700 represents MFC version 7.    m_strOutput += "\r\n";    m_strOutput += "MFC Version [_MFC_VER]: ";#ifdef _MFC_VER    swprintf_s(buffer, MAX_PATH, TEXT("0x%0.4X"), _MFC_VER);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // _MSC_EXTENSIONS - Defined when compiling with the /Ze compiler option (the default).    // Its value, when defined, is 1.    m_strOutput += "\r\n";    m_strOutput += "Microsoft Language Extensions [_MSC_EXTENSIONS]: ";#ifdef _MSC_EXTENSIONS    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("ENABLED"), _MSC_EXTENSIONS);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("DISABLED"));#endif    m_strOutput += buffer;    // _MSC_VER - Reports the major and minor versions of the compiler.    // For example, 1310 for Microsoft Visual C++ .NET 2003.    // 1310 represents version 13 and a 1.0 point release.    // The current compiler version is 1400.    m_strOutput += "\r\n";    m_strOutput += "Microsoft Compiler Version (_MSC_VER): ";#ifdef _MSC_VER    swprintf_s(buffer, MAX_PATH, TEXT("%d"), _MSC_VER);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // __MSVC_RUNTIME_CHECKS - Defined when one of the /RTC compiler options is specified.    m_strOutput += "\r\n";    m_strOutput += "Run-Time Error Checks (__MSVC_RUNTIME_CHECKS): ";#ifdef __MSVC_RUNTIME_CHECKS    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("ENABLED"), __MSVC_RUNTIME_CHECKS);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("DISABLED"));#endif    m_strOutput += buffer;    // Defined when /MD or /MDd (Multithreaded DLL) or /MT or /MTd (Multithreaded) is specified.    m_strOutput += "\r\n";    m_strOutput += "Multithreaded (_MT): ";#ifdef _MT    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _MT);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // _NATIVE_WCHAR_T_DEFINED - Defined when /Zc:wchar_t is used.    m_strOutput += "\r\n";    m_strOutput += "wchar_t Is Native Type (_NATIVE_WCHAR_T_DEFINED): ";#ifdef _NATIVE_WCHAR_T_DEFINED    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _NATIVE_WCHAR_T_DEFINED);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // _OPENMP - Defined when compiling with /openmp, returns an integer representing the date of    // the OpenMP specification implemented by Visual C++.    // _OPENMP_dir.cpp    // compile with: /openmp    // #include <stdio.h>    // int main() { printf("%d\n", _OPENMP); }sdOutput200203    m_strOutput += "\r\n";    m_strOutput += "OpenMP Specification Date (_OPENMP): ";#ifdef _OPENMP    swprintf_s(buffer, MAX_PATH, TEXT("%d"), _OPENMP);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("UNDEFINED"));#endif    m_strOutput += buffer;    // _VC_NODEFAULTLIB - Defined when /Zl is used; see /Zl (Omit Default Library Name) for more information.    m_strOutput += "\r\n";    m_strOutput += "Omit Default Library Name (_VC_NODEFAULTLIB): ";#ifdef _VC_NODEFAULTLIB    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _VC_NODEFAULTLIB);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // _WCHAR_T_DEFINED - Defined when /Zc:wchar_t is used or if wchar_t is defined in a system header    // file included in your project.    m_strOutput += "\r\n";    m_strOutput += "wchar_t Is Native Type (_WCHAR_T_DEFINED): ";#ifdef _WCHAR_T_DEFINED    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _WCHAR_T_DEFINED);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // _WIN32 - Defined for applications for Win32 and Win64. Always defined.    m_strOutput += "\r\n";    m_strOutput += "Windows 32-bit (_WIN32): ";#ifdef _WIN32    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _WIN32);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // Defined for applications for Win64.    m_strOutput += "\r\n";    m_strOutput += "Windows 64-bit (_WIN64): ";#ifdef _WIN64    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _WIN64);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    // Defined when specifying /Wp64.    m_strOutput += "\r\n";    m_strOutput += "Detect 64-Bit Portability Issues (_Wp64): ";#ifdef _Wp64    swprintf_s(buffer, MAX_PATH, TEXT("%s (%d)"), TEXT("YES"), _Wp64);#else    swprintf_s(buffer, MAX_PATH, TEXT("%s"), TEXT("NO"));#endif    m_strOutput += buffer;    return false;}

When the function finishes m_stroutput contains a string looking something like this:

-- Microsoft-Specific Predefined Macros --ATL Version: 0x0800Default char Type Is unsigned [_CHAR_UNSIGNED]: NOCommon Language Runtime Version [__CLR_VER]: UNDEFINED__cplusplus_cli: NOC++ Program [__cplusplus]: YES (199711)C++ Standard Library Header Version [_CPPLIB_VER]: UNDEFINEDEnable Run-Time Type Information [_CPPRTTI]: YES (1)Enable Exception Handling [_CPPUNWIND]: YES (1)Debug Mode [_DEBUG]: YES (1)Multithread DLL [_DLL]: NOFunction name (decorated) [__FUNCDNAME__]: ?UseMicrosoftSpecificPredefinedMacros@CPreprocessingDlg@@AAE_NXZFunction signature [__FUNCSIG__]: bool __thiscall CPreprocessingDlg::UseMicrosoftSpecificPredefinedMacros(void)Function name [__FUNCTION__]: CPreprocessingDlg::UseMicrosoftSpecificPredefinedMacrosIntegral type maximum size (in bits) [_INTEGRAL_MAX_BITS]: 64DEC ALPHA Platform [_M_ALPHA]: NOCommon Language Runtime Compilation [_M_CEE]: NOCommon Language Runtime Pure Compilation [_M_CEE_PURE]: NOCommon Language Runtime Safe Compilation [_M_CEE_SAFE]: NOMinimum CPU Architecture [_M_IX86]: 600 - Blend (/GB) or Pentium Pro, Pentium II, Pentium III (/G6)Itanium Processor Family 64-bit [_M_IA64]: NOMinimum CPU Architecture [_M_IX86_FP]: 0 - NO Streaming SIMD ExtensionsPower Macintosh Platform [_M_MPPC]: NOMIPS Platform (_M_MRX000): NOPowerPC Platform [_M_PPC]: NOx64 Platform [_M_X64]: NOManaged Code [_MANAGED]: NOMFC Version [_MFC_VER]: 0x0800Microsoft Language Extensions [_MSC_EXTENSIONS]: ENABLED (1)Microsoft Compiler Version (_MSC_VER): 1400Run-Time Error Checks (__MSVC_RUNTIME_CHECKS): ENABLED (1)Multithreaded (_MT): YES (1)wchar_t Is Native Type (_NATIVE_WCHAR_T_DEFINED): YES (1)OpenMP Specification Date (_OPENMP): UNDEFINEDOmit Default Library Name (_VC_NODEFAULTLIB): NOwchar_t Is Native Type (_WCHAR_T_DEFINED): YES (1)Windows 32-bit (_WIN32): YES (1)Windows 64-bit (_WIN64): NODetect 64-Bit Portability Issues (_Wp64): YES (1)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.