zoukankan      html  css  js  c++  java
  • 【转】用宏定义代替printf函数

    问题提出

    有时候我们想用宏定义来决定是编译debug版本的代码还是release的代码,dubug版本的代码会通过printf打印调试信息,release版本的代码则不会。我们总不能对每一条printf都这样写:

    1 #if _DEBUG_
    2 printf("hello world!");
    3 #endif

    这样子实在是太麻烦了!万一要各个地方都要打印,会使版面看起来很乱。

    解决方法

    我后来想到一个方法,可以使用宏定义代替printf函数,由于printf是可变参数的函数,这里就要用到变參宏(…和__VA_ARGS__)。 
    在头文件下写此代码

    1 #define _DEBUG_ 1
    2 
    3 #if _DEBUG_
    4 #define PR(...) printf(__VA_ARGS__)
    5 #else
    6 #define PR(...) 
    7 #endif

    后面需要打印调试信息的时候使用PR宏就可以了,如果需要release版本,不打印调试信息,就把DEBUG设置为0,编译出来的程序就不会打印调试信息了。

    示例代码清单

    开发环境VS2013。当DEBUG设置为1,打印PR的信息;当DEBUG设置为0,不打印PR的信息。

     1 #include "stdafx.h"
     2 
     3 #define _DEBUG_ 1
     4 
     5 #if _DEBUG_
     6 #define PR(...) printf(__VA_ARGS__)
     7 #else
     8 #define PR(...)
     9 #endif
    10 
    11 int _tmain(int argc, _TCHAR* argv[])
    12 {
    13 
    14     printf("debug test!
    ");
    15 
    16     PR("hello world!
    ");
    17     PR("string:%s
    ", "data");
    18     PR("integer:%d
    ", 100);
    19 
    20     return 0;
    21 }

    提醒

    该技巧可以用在单片机C语言开发上,切换版本非常方便。 
    keil环境下如何重定向printf到串口,可以参考这里

    来源

  • 相关阅读:
    基于Mybatis3.0.6的基本操作介绍
    正则验证邮箱格式是不是正确
    Linux_文件权限
    飘逸的python
    通过Fsharp探索Enterprise Library Exception
    Oracle学习——扫盲篇
    代码块练习题:看代码写程序的执行结果。
    代码块:在Java中用{}括起来的代码
    Java中如何使用帮助文档(API)
    Java如何制作帮助文档(API)
  • 原文地址:https://www.cnblogs.com/skullboyer/p/8341060.html
Copyright © 2011-2022 走看看