`
liyiting
  • 浏览: 20751 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转] #ifdef _DEBUG用法小结

阅读更多

1
#ifdef _DEBUG 
virtual void AssertValid() const; //assert(断言)valid(有效的,正确的)
virtual void Dump(CDumpContext& dc) const; //存储上下文
#endif
这两个函数是调试用的,第一个函数检查可用性,即是否有效 
第二个函数如果未更改的话,最终调用的是Cwnd::Dump(); 
输出窗口类名,标题名等一系列信息(在输出窗口中) 
#ifdef _DEBUG 
#endif 
这是条件编译,即如果有#define _DEBUG这两个函数会编译,否则忽略, 
当你用debug生成时(相对于release)开发环境则自动的加上这个宏定义,这两个函数有效。

2
#ifdef   _DEBUG     //   判断是否定义_DEBUG   
#undef   THIS_FILE     //   取消THIS_FILE的定义   
static   char   THIS_FILE[]=__FILE__;     //   定义THIS_FILE指向文件名   
#define  new    DEBUG_NEW     //   定义调试new宏,取代new关键字   
#endif     //   结束       
如果定义了_DEBUG,表示在调试状态下编译,因此相应修改了两个符号的定义
THIS_FILE是一个char数组全局变量,字符串值为当前文件的全路径,这样在Debug版本中当程序出错时出错处理代码可用这个变量告诉你是哪个文件中的代码有问题。
定义 _DEBUG后,由于定义了_DEBUG,编译器确定这是一个调试,编译#ifdef   _DEBUG和#endif之间的代码。#undef   表示清除当前定义的宏,使得THIS_FILE无定义。__FILE__   是编译器能识别的事先定义的ANSI   C   的6个宏之一。#define   new   DEBUG_NEW   
DEBUG_NEW定位内存泄露并且跟踪文件名. 
////////////////////////////////////////////////////////////////////////
///另一种解释
#ifdef     _DEBUG     //如果是debug状态   
#undef     THIS_FILE     //清除THIS_FILE   
static     char     THIS_FILE[]=__FILE__;     //定义THIS_FILE为                                        //__FILE__(这是当前文件全路径名字)       
#define    new     DEBUG_NEW     //定义new为DEBUG_NEW(这个可以检测到内          //存泄露之类的问题,其实就是可以使用crt开头的那几个调试函数)   
#endif

 

http://blog.csdn.net/shijizhisheng/article/details/1908054

分享到:
评论

相关推荐

    解译#ifdef __cplusplus

    在跨语言编程的场景中,特别是在混合使用 C 和 C++ 编程时,经常会遇到 `#ifdef __cplusplus` 以及 `extern "C"` 这样的预处理器指令和关键字。这些语法结构的存在主要是为了兼容 C 和 C++ 之间的差异,特别是针对...

    #ifdef_#else_#endif_#if_#ifndef的用法.txt

    #ifdef_#else_#endif_#if_#ifndef的用法.txt

    预编译#define_#ifdef_#endif用法

    在上面的例子中,当DEBUG被定义时,`#ifdef DEBUG`后面的代码块才会被编译并执行,否则这部分代码将被忽略。 `#ifdef`是检查某个宏是否已被定义的指令。如果指定的宏存在(已经被`#define`),则`#ifdef`后的代码块...

    #ifdef __cplusplus深度剖析

    "#ifdef __cplusplus深度剖析" 本文将深入探讨`#ifdef __cplusplus`语句的用途和机理,以及在C++编程中extern "C"的必要性。 首先,让我们来了解`#ifdef __cplusplus`语句的含义。在C++编程中,`__cplusplus`是一...

    #ifdef,#else,#endif和#ifndef的用法

    "#ifdef,#else,#endif和#ifndef的用法" #ifdef、#else、#endif 和#ifndef 是 C/C++ 预处理命令中条件编译的四个基本指令,它们可以帮助开发者在编译前对代码进行选择性编译,从而实现代码的灵活使用和高效编译。 #...

    __VA_ARGS__用法

    #ifdef _DEBUG #define DEBUG_TO_FILE #ifdef DEBUG_TO_FILE #define DEBUG_FILE "/tmp/debugmsg" #define DEBUG_BUFFER_MAX 4096 #define printDebugMsg(moduleName, format, ...) do { \ char buffer[DEBUG_...

    #ifdef,#else,#endif,#if用法详解

    下面我们将详细地介绍它们的用法和实例分析。 #ifdef 命令 #ifdef 命令是用来判断一个宏是否已经被定义,如果宏已经被定义,那么编译器将编译后面的代码,否则将跳过。 例如: ``` #define NUM #ifdef NUM ...

    linux 函数时间统计 打印

    #ifdef __TIME_TRACE_DEBUG__ # define TIME_TRACE tt::record Tt_ReCoRd_AvOiD_ReDeF(new tt::func_time_info(__func__)); # define TIME_TRACE_RESET tt::ctrl::inst()->reset(); # define TIME_TRACE_FORCE_...

    #ifdef的用法详解

    "#ifdef 的用法详解" #ifdef 指示符是 C 语言中的一种预处理指令,用于条件编译,即根据不同条件编译不同的代码。下面是 #ifdef 的用法详解: 首先,#ifdef 的基本格式为: ``` #ifndef <标识> #define <标识> ......

    Libcurl---编译好的lib文件,含release,debug版本;

    #ifdef _DEBUG #pragma comment(lib,"libcurld.lib") #else #pragma comment(lib,"libcurl.lib") #endif #pragma comment ( lib, "ws2_32.lib" ) #pragma comment ( lib, "winmm.lib" ) #pragma comment ( lib, ...

    商品销售管理系统

    #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define BCMENU_GAP 1 #ifndef OBM_CHECK #define OBM_CHECK 32760 // from winuser.h #endif #if _MFC_VER ...

    c语言#ifdef等宏及妙用

    #### #ifdef、#ifndef 和 #if 的基本用法 ##### #ifdef `#ifdef` 是最常用的条件编译指令之一,用于检查某个宏是否已经被定义。其语法格式如下: ``` #ifdef 标识符 // 程序段1 #else // 程序段2 #endif ``` 如果`...

    超级终端程序

    #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif BEGIN_MESSAGE_MAP(CCSocketApp, CWinApp) ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP() ...

    debug宏合集dbg.h

    debug 宏合集 #ifdef NDEBUG #define debug(M, ...) #else #define debug(M, ...) fprintf(stderr, "DEBUG %s:%d: " M ...#define check_debug(A, M, ...) if(!(A)) { debug(M, ##__VA_ARGS__); errno=0; goto error; }

    VC环境MP3播放器的开发附实例源代码

     #ifdef _DEBUG  #define new DEBUG_NEW  #define WM_MYMESSAGE WM_USER+6  #undef THIS_FILE  static char THIS_FILE[] = __FILE__;  #endif  修改为Release状态下的代码:  #define WM_MYMESSAGE ...

    Minix源代码

    ANSI_H 00021 #define _ANSI_H 00022 00023 #if __STDC__ == 1 00024 #define _ANSI 31459 /* compiler claims full ANSI conformance */ 00025 #endif 00026 00027 #ifdef __GNUC__ 00028 ...

    推箱子-C++课程设计(源码)

    #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif 已测试,能正常运行。 //地图状态 #define MAP_BACKGROUP 48 //'0' 对应字符'0'背景 #define MAP_WHITEWALL 49 /...

    stl_algobase.h

    #ifdef __STL_USE_NEW_IOSTREAMS #include #else /* __STL_USE_NEW_IOSTREAMS */ #include #endif /* __STL_USE_NEW_IOSTREAMS */ #ifndef __SGI_STL_INTERNAL_ITERATOR_H #include <stl_iterator_base.h> #...

    C语言之详解#ifdef等宏

    C语言之详解#ifdef等宏 #ifdef 等宏是C语言中的一种条件编译指令,用于控制程序的编译流程。它可以根据不同的条件编译不同的代码段,从而提高程序的通用性和灵活性。 条件编译的基本形式 条件编译的基本形式是: ...

    8192CU LINUX驱动

    //#define CONFIG_DEBUG_CFG80211 1 #endif /* * Internal General Config */ //#define CONFIG_PWRCTRL //#define CONFIG_H2CLBK #define CONFIG_EMBEDDED_FWIMG 1 //#define CONFIG_FILE_FWIMG #ifdef ...

Global site tag (gtag.js) - Google Analytics