您的位置:首页 > 其它

多等级debug输出的简单例子(c编译器: gcc(支持C99标准))

2012-07-20 16:58 363 查看
  利用C99标准支持的__VA_ARGS__宏 (C99 宏支持取参数 #define Macro(...) __VA_ARGS__   使用宏的时候,参数如果不写,宏里用 #,## 这样的东西会扩展成空串。(以前会出错的)),做的带多等级debug输出的简单例子,便于程序开发!

#include <stdio.h>
#include <stdarg.h>
#define BUFFER_SIZE 1024

#define DEBUG_LEVEL 4

typedef enum{
DEBUG_LEVEL_ERROR=0,
DEBUG_LEVEL_WARNING,
DEBUG_LEVEL_NOTICE,
DEBUG_LEVEL_INFO,
DEBUG_LEVEL_DEBUG
}ErrorLevel;

#define transDebug(level) \
do{ \
switch(level) \
{ \
case 0: \
printf("Error: "); \
break; \
case 1: \
printf("Warning: "); \
break; \
case 2: \
printf("Notice: "); \
break; \
case 3: \
printf("Information: "); \
break; \
case 4: \
printf("Debug: "); \
break; \
default: \
printf("Unknown Level: "); \
} \
}while(0)
#define debugPrint(debugLevel,format,...) \
do \
{ \
if(debugLevel<DEBUG_LEVEL) \
{ \
printf("%s(line:%d): ",__FILE__,__LINE__,debugLevel); \
transDebug(debugLevel); \
printf(format,##__VA_ARGS__); \
} \
}while(0)

int main(int argc,char **argv)
{
int string[3];
const char *hello="hello the world";
int num=5+3;
debugPrint(5,"hello the world\n");
//debugPrint(2); error
debugPrint(1,"hello:%s\n",hello);
debugPrint(3,"%s--->%d\n",hello,sizeof(string)/sizeof(int));
return 0;
}

结果:

  lin@lin-host:~$ gcc test.c
  lin@lin-host:~$ ./a.out
      test.c(line:57): Warning: hello:hello the world
      test.c(line:58): Information: hello the world--->3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐