C编写的调试宏

来源:互联网 发布:mfi 指标算法 编辑:程序博客网 时间:2024/05/23 22:40

#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 ERRBUFLEN1024#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参数:宏的设置与取消