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