基于项目联调的需要,有时候需要在代码中加些打印,以确定问题出错的位置。
但是在发布版本中,需要去掉这些打印,所以问一下大家怎么样写一个通用的宏。
例如相似如下,调试时打开宏COMBINED_DEBUG,发布版本中关闭该宏
但是在发布版本中,需要去掉这些打印,所以问一下大家怎么样写一个通用的宏。
例如相似如下,调试时打开宏COMBINED_DEBUG,发布版本中关闭该宏
#if defined(COMBINED_DEBUG) # define XX_PRINTF(expression) printf(expression) #else # define XX_PRINTF(expression) #endif
但这样无法做到支持printf的可变参数,问一下该怎么样修正这个问题呢
解决方案
20
C++11可以
http://en.cppreference.com/w/cpp/preprocessor/replace 里面的(3)
http://en.cppreference.com/w/cpp/preprocessor/replace 里面的(3)
5
这么做的,看看行不?
#if defined(COMBINED_DEBUG)
# define XX_PRINTF printf
#else
# define XX_PRINTF
#endif
#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 又返回值
#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));
#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
#if defined(COMBINED_DEBUG)
# define XX_PRINTF printf
#else
# define XX_PRINTF //
#endif