__FILE__,__LINE__

来源:互联网 发布:瓯江学院c语言网址 编辑:程序博客网 时间:2024/04/19 16:45

见的情况是,我们实现了一个函数,希望它只在某种编译条件满足是被编译和使用。例如,我希望在源码中插入调试语句,以便以Debug方式运行时能够通过调试信息观察程序运行情况。但是,在产品发售给用户时,我又希望这些调试信息不要输出,以降低代码尺寸,提高运行性能。 这一问题的解决方法就是使用宏。根据条件编译指令,对于不同的编译条件,提供不同的实现。例如:我们希望在特定的位置向日志中写入当前行号和文件名,以判断对应代码是否被执行到,可以使用下面的宏:

        #ifdef _DEBUG        #define TRACE_FILE_LINE_INFO() do{/            CString str;/            str.Format(_T("file=%s,line=%u/r/n",__FILE__,__LINE__);/            CFile file("logfile.txt");/            file.Write(str,str.GetLength());/       }while(0)       #else       #define TRACE_FILE_LINE_INFO()        #endif

上面这段代码通过#ifdef #else #endif三个条件编译指令,根据_DEBUG定义情况(该宏用于区分DEBUG版本和Release版本),决定了具体的TRACE_FILE_LINE_INFO宏函数的实现。使用者可以用如下方法使用

    TRACE_FILE_LINE_INFO();//这里显示行号和文本信息

当然,采用其他方式也可以实现这一功能,但是使用宏有以下特殊好处: 只有需要的代码才会被编译,减少了符号表的尺寸,也减少了代码尺寸 宏在编译时被展开,因此用于表示代码位置的__FILE__,__LINE__宏可以起作用,如果用函数实现,这两个宏则不能起作用。

原创粉丝点击