阅读576 返回首页    go 阿里云 go 技术社区[云栖]


C编写的调试宏

#define LOG(...) {char _bf[1024]; snprintf(_bf, sizeof(_bf),__VA_ARGS__);fprintf(stderr,"%s", _bf);}

以上的代码为另外一种风格,后期可以进行封装。


<<debug.h>>

#ifndef _DEBUG_H_
#define _DEBUG_H_

#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define ERRBUFLEN 1024

#ifdef DEBUG_ON

#define ERR_PRINT(str) \
  do \
  { \
  char errbuf[ERRBUFLEN] = { '\0' }; \
  snprintf(errbuf, ERRBUFLEN, "[file %s line: %d] %s", __FILE__, __LINE__, str); \
  fprintf(stderr, "\033[31m"); \
  perror(errbuf); \
  fprintf(stderr, "\033[0m"); \
  } while( 0 )
#define INFO_PRINT(str) \
  do \
  { \
  printf("\033[31m"); \
  printf("[file: %s line: %d] %s\n", __FILE__, __LINE__, str); \
  printf("\033[0m"); \
  } while ( 0 )
#else
#define ERR_PRINT(str)
#define INFO_PRINT(str)
#endif

#endif

#ifndef _DEBUG_H_
#define _DEBUG_H_
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define ERRBUFLEN	1024
#ifdef DEBUG_ON
#define ERR_PRINT(str) \
  do \
  { \
  char errbuf[ERRBUFLEN] = { '\0' }; \
  snprintf(errbuf, ERRBUFLEN, "[file %s line: %d func:%s] %s", __FILE__, __LINE__, __FUNCTION__, str); \
  fprintf(stderr, "\033[31m"); \
  perror(errbuf); \
  fprintf(stderr, "\033[0m"); \
  } while( 0 )
#define INFO_PRINT(str) \
  do \
  { \
  printf("\033[31m"); \
  printf("[file: %s line: %d func:%s] %s\n", __FILE__, __LINE__, __FUNCTION__, str); \
  printf("\033[0m"); \
  } while ( 0 )
#else
#define ERR_PRINT(str)
#define INFO_PRINT(str)
#endif
#endif


<<debug.c>>

#include "debug.h"

int main()
{
  printf("test\n");
  FILE *fp = NULL;

  fp = fopen("./none.txt", "r");
  if (NULL == fp){
    ERR_PRINT("fopen error");
  }

  int i = 1;
  if (i < 2){
    INFO_PRINT("i < 2");
  }

  return 0;
}

#include "debug.h"
int main()
{
  printf("test\n");
  FILE *fp = NULL;

  fp = fopen("./none.txt", "r");
  if (NULL == fp){
    ERR_PRINT("fopen error");
  }

  int i = 1;
  if (i < 2){
    INFO_PRINT("i < 2");
  }
  return 0;
}


运行结果:

 

 

gcc的-D和-U参数:宏的设置与取消

最后更新:2017-04-03 16:48:54

  上一篇:go 【C大事】第一讲:你是好人么?MessageBox()
  下一篇:go 【C大事】第四讲:重复代码封装函数的思想