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