编写一个打印的宏

C语言 码拜 5年前 (2016-05-07) 493次浏览
基于项目联调的需要,有时候需要在代码中加些打印,以确定问题出错的位置。
但是在发布版本中,需要去掉这些打印,所以问一下大家怎么样写一个通用的宏。
例如相似如下,调试时打开宏COMBINED_DEBUG,发布版本中关闭该宏

#if defined(COMBINED_DEBUG)
#    define XX_PRINTF(expression) printf(expression)
#else
#    define XX_PRINTF(expression)
#endif

但这样无法做到支持printf的可变参数,问一下该怎么样修正这个问题呢

解决方案

20

5

这么做的,看看行不?
#if defined(COMBINED_DEBUG)
#    define XX_PRINTF printf
#else
#    define XX_PRINTF
#endif

5

1)还可以这样定义,不知老板的编译器支持不支持
#include <stdio.h>
#if defined(COMBINED_DEBUG)
#define Print printf
#else
#define Print(…)
#endif // COMBINED_DEBUG
2)或:
#ifdef NDEBUG
#define Print printf
#else
#define Print(…) ((int)(0))
#endif // COMBINED_DEBUG
1)没有警告,但不知道早期板本支持不支持
2)有警告,但是更符合  printf 函数输出的情况,原因是 printf 又返回值

10

远古时期大家都是下面这样,  移植性最好,  C99 后可以 像9楼…
#if defined(COMBINED_DEBUG)
#    define XX_PRINTF(expression)   printf  expression
#else
#    define XX_PRINTF(expression)
#endif
唯一不好的就是使用的时候要多打一对括号,   XX_PRINTF((“Hello %d\n”, 100));

10

这样试试看
#if defined(COMBINED_DEBUG)
#    define XX_PRINTF printf
#else
#    define XX_PRINTF  //
#endif

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明编写一个打印的宏
喜欢 (0)
[1034331897@qq.com]
分享 (0)