zoukankan      html  css  js  c++  java
  • visual c++中预定义的宏

    一、主要目标

    (由于visual studio通常包含很多开发环境,通常将其中c/c++的ide称为visual c++ 20xx)

    整理下visual c++ 2010下预定义的宏。做一下备忘和了解,在实际编码中可以考虑使用部分宏作为判断标准。

    主要参考链接:http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.100).aspx

    二、vc++ 2010中预定义宏

     注意本文中提及的所有预定义宏都是无参数的,并且不能重定义。

    1. __FILE__、__LINE__

    这两个预定义宏是c语言中定义的,主要用于标识代码段所在的源文件名称(全路径或者文件名)以及当前位置在源文件中的行数。多用于错误跟踪、预编译报错、程序异常跟踪等,比如TRACE、ASSERT失败的提示信息。

    2. _CHAR_UNSIGNED

    vc中附加定义的宏。主要用于说明char类型的数据,是有符号的还是无符号的。默认情况下char是无符号的。

    在很多开源项目里面,使用cl或gcc编译源码时可能需要关注下char的正负:因为有符号的char在做数值运行遇到类型提升的情况可能会存在不确定性的行为(跟编译器的实现有关)。

    3. __FUNCDNAME__、__FUNCSIG__、__FUNCTION__ 

    vc中定义的宏。仅在函数实现中使用有效。三个宏分别表示:编译器修饰后的函数名称、函数签名、代码中的函数名称。

    实际使用可参考下列代码:

    void exampleFunction()
    {
        printf("Function name: %s
    ", __FUNCTION__);
        printf("Decorated function name: %s
    ", __FUNCDNAME__);
        printf("Function signature: %s
    ", __FUNCSIG__);
        
        // vc++ 2010的实际输出 
        // -------------------------------------------------
        // Function name: exampleFunction
        // Decorated function name: ?exampleFunction@@YAXXZ
        // Function signature: void __cdecl exampleFunction(void)
    }
    View Code

    4. _WIN32、_WIN64

    vc中定义的宏。用于说明应用程序是基于win32或是win64平台的。

    5. _DEBUG

    vc中定义的宏。含义很明显,用于标识当前程序是调试版本。

    之所以单独拿出来是因为 _DEBUG和DEBUG两个宏经常混在一起,很容易让人误解到底该使用哪一个。

    按照msdn上介绍和说明,几乎多数资料都只有_DEBUG宏,这也是assert、TRACE等生效必须定义的宏。

    那么DEBUG这个宏是从哪里来的呢?  MFC程序里面通常会用DEBUG宏定义。你可以随便找个mfc项目中的源代码文件,输入#ifdef DEBUG,然后转到定义看看其实现。在atldef.h中,会看到如下定义:

    #ifdef _DEBUG
    #ifndef DEBUG
    #define DEBUG
    #endif
    #endif

    这样就是比较显然了。是mfc中预定义的宏,个人感觉像是防止用户误使用。

    因此,在实际编码中应该使用_DEBUG宏,不要使用DEBUG(即使已经定义了)。

  • 相关阅读:
    Service Broker between two instance
    第一次调用Web service响应速度慢的解决办法
    MVC静态化
    WinFrom Exception Handler
    The difference for ROW_NUMBER/RANK/DENSE_RANK/NTILE
    字符编码
    TSQL中的参数与变量
    Entity Framework Power Tool
    Use ActionFilterAttribute to check user logging
    SiteFactory技术实现QQ群19452522用户交流贴
  • 原文地址:https://www.cnblogs.com/tocy/p/4090459.html
Copyright © 2011-2022 走看看