zoukankan      html  css  js  c++  java
  • 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
    ", __cplusplus_cli);
       #else
          printf("not defined
    ");
       #endif
    }
    

    __COUNTER__

    用于源文件的源文件或包含的标头时,扩展为从0开始并提高x 1的整数。当您使用预编译标头时,__COUNTER__ 确保其状态。

    下面的示例使用 __COUNTER__ 分配唯一标识符到同一类型的三个不同的对象。

    首先,假定下面的类定义。构造函数采用整数作为参数。

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

    在主,应用程序声明类型 exampleClass三个对象,使用 __COUNTER__ 作为唯一标识符参数。

    // 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
    ", e1.GetID());
    	printf("e2 ID: %i
    ", e2.GetID());
    	printf("e3 ID: %i
    ", 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__ 宏显示函数信息。

    // Demonstrates functionality of __FUNCTION__, __FUNCDNAME__, and __FUNCSIG__ macros
    void exampleFunction()
    {
    	printf("Function name: %s
    ", __FUNCTION__);
    	printf("Decorated function name: %s
    ", __FUNCDNAME__);
    	printf("Function signature: %s
    ", __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
    ", _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
    ", _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

  • 相关阅读:
    Cannot get a NUMERIC value from a STRING cell? 已解决
    Android Studio快捷键大全
    mysql索引
    eclipse中出现错误 Syntax error, insert "}" to complete Block
    function
    IGS OPC UA 配置
    IFIX 5.9 历史数据 曲线 (非SQL模式)
    IFIX 5.9 报警存sql
    IFIX 数据源 节点 标签 域名
    IFIX 目录结构
  • 原文地址:https://www.cnblogs.com/renyuan/p/6563843.html
Copyright © 2011-2022 走看看