为了账号安全,请及时绑定邮箱和手机立即绑定

#用C定义调试打印的宏?

#用C定义调试打印的宏?

C
繁花如伊 2019-06-15 17:21:41
#用C定义调试打印的宏?尝试创建一个宏,在定义调试时可用于打印调试消息,如以下伪代码:#define DEBUG 1#define debug_print(args ...) if (DEBUG) fprintf(stderr, args)这是如何通过宏实现的?
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我用的是这样的东西:

#ifdef DEBUG #define D if(1) #else
 #define D if(0) #endif

我只是用D作为前缀:

D printf("x=%0.3f\n",x);

编译器看到调试代码,没有逗号问题,而且它在任何地方都能工作。同样,当printf仅当您必须转储数组或计算程序本身多余的诊断值时,这是不够的。

编辑:好的,当有else在附近的某个地方可以被注入if..这是一个超越它的版本:

#ifdef DEBUG #define D 
#else
 #define D for(;0;)#endif


查看完整回答
反对 回复 2019-06-15
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

对于可移植的(ISO C 90)实现,可以使用双括号,如下所示;

#include <stdio.h>#include <stdarg.h>#ifndef NDEBUG#  define debug_print(msg) stderr_printf msg#else# 
 define debug_print(msg) (void)0#endifvoidstderr_printf(const char *fmt, ...){
  va_list ap;
  va_start(ap, fmt);
  vfprintf(stderr, fmt, ap);
  va_end(ap);}intmain(int argc, char *argv[]){
  debug_print(("argv[0] is %s, argc is %d\n", argv[0], argc));
  return 0;}

或者(Hackish,不推荐)

#include <stdio.h>#define _ ,#ifndef NDEBUG#  define debug_print(msg) fprintf(stderr, msg)#else#  
define debug_print(msg) (void)0#endifintmain(int argc, char *argv[]){
  debug_print("argv[0] is %s, argc is %d"_ argv[0] _ argc);
  
  return 0;}


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 666 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信