当前位置:C++技术网 > 资讯 > 预编译宏的妙用,智能识别程序版本进行处理,省心省力!!

预编译宏的妙用,智能识别程序版本进行处理,省心省力!!

更新时间:2015-06-27 01:24:00浏览次数:1+次

    使用预编译宏识别程序项目Debug和Release版本,来根据需要轻松在Debug中提示,而在Release中不提示。非常的省心省力!
    今天在调试一个程序Bug的时候,想通过MessageBox函数将错误码提示给我,但是在放出Release版的程序中,不想别人看到这个提示。本来可以这样,就是在Release版程序中,将这些消息框注释掉。但是比较麻烦,如果写的多,要到处找。这个在C语言控制台程序、Win32、MFC都是如此。通过一些技巧,可以让我们的程序轻松的识别程序版本来自动处理。
    原理就是通过一个宏_DEBUG,如果定义了,则表示当前项目是Debug版本,否则就是Release版本。原理如此简单,使用也不难,只是可能你并没有注意过,或者只是不知道而已。
    如果你想在Debug版本提示信息,而在Release版本不提示,那么就可以通过这个宏达到效果。这个实在VS和VC中有效,至于其他的IDE,不太清楚,或许是宏名字不一样,也不一定,看具体的IDE了。
    在CPP文件的开头,自己加上编译器条件判断。编译器条件判断和C语言的一样,只是在前面加了一个#号而已。这样我们就可以定义一个预编译时根据项目版本来使用不同的宏。代码如下:

#include <stdio.h>
#ifdef _DEBUG
#define TestPrintf printf
#else
#define TestPrintf 
#endif
     #ifdef _DEBUG表示如果定义了_DEBUG宏,即当前项目模式是Debug模式,则执行里面的定义,否则就是后面的定义。因此,TestPrintf在Debug模式下定义成了printf,而在Release模式下,则定义为空,表示直接把这个宏对应的东西替换成空。
    定义后,就可以将TestPrintf当成是printf使用,一模一样的使用。只是换了个名字而已。只是在Release模式下,这个函数就不存在了,编译时看不到这个函数,即自动忽略了TestPrintf的存在。如此就达到了效果。
    当然,还有另一种方法,那就是直接在代码里面嵌入预编译指令。这个是高手封装库经常使用的。
    代码如下:

#include "stdio.h"

#ifdef _DEBUG
#define TestPrintf printf
#else
#define TestPrintf 
#endif

void main()
{
    int i=100;
    #ifdef _DEBUG
    printf("Debug模式\n");
    #else
    printf("Release模式\n");
    #endif

    TestPrintf("%d",i);
}
     将预编译指令嵌入在代码中,则在编译时,会根据需要编译和不编译对应的语句。是不是很帅呢?哈哈。这样,让我们对于程序在Debug和Release版本中轻松处理。当然,比如在不同的字符版本如Unicode版本和ANSI版本之间区别,也可以这样使用。只是宏不一样罢了。期待你去尝试咯。这里就不写了。其他的MFC、Win32中定义消息函数,方法一样,就不罗列了。