1.html
#include <stdio.h> #include <stdarg.h> //僅僅是打印函數名字替換 DEBUG <--> printf #define DEBUG(format, ...) printf(format, ##__VA_ARGS__) //替換打印函數,在打印出來的內容加上前綴 #define XFUNC_PRINT(format, arg...) printf("XFUNC: " format "", ##arg) //名字替換,並在打印出來的內容加上前綴,同時加入定位的功能。 #define TRC_P(fmt, args...) fprintf(stderr," TRC_P(%s:%d):\t" fmt, __func__, __LINE__, ##args) //名字替換,並在打印出來的內容加上前綴,同時加入定位的功能,並讓打印的前綴具有特殊顏色(\033[1;32m \033[0m這些表示顏色,\t必定程度上使屏幕輸出對齊) #define TRC_PG(fmt, args...) fprintf(stderr, "\033[1;32m TRC_PG(%s:%d):\t\033[0m" fmt, __func__, __LINE__, ## args) //名字替換,並在打印出來的內容加上前綴,同時加入定位的功能,並讓打印的前綴具有特殊顏色 #define TRC_PR(fmt, args...) fprintf(stderr, "\033[1;31m TRC_PR(%s:%d):\t\033[0m" fmt, __func__, __LINE__, ## args) int main(void) { int i= 0; DEBUG("hello,%d\n",i++); XFUNC_PRINT("hello,%d\n",i++); TRC_P("hello,%d\n",i++); TRC_PG("hello,%d\n",i++); TRC_PR("hello,%d\n",i++); return 0; } /* [root@localhost jz2440]# gcc test.c ;./a.out hello,0 XFUNC: hello,1 TRC_P(main:27): hello,2 TRC_PG(main:28): hello,3 ----這裏前綴是綠色的 TRC_PR(main:29): hello,4 ----這裏前綴是紅色的 */
2.linux
#include <stdio.h> //以十六進制打印一個數val的值,輸出格式爲val=0x... #define HEX_PI(VAL)\ do{\ printf(#VAL"=%#x,fuc:%s,line:%d\n", VAL, __FUNCTION__, __LINE__);\ }while(0) //以十進制打印一個數val的值,輸出格式爲val=... #define DEC_PI(VAL)\ do{\ printf(#VAL"=%#d,fuc:%s,line:%d\n", VAL, __FUNCTION__, __LINE__);\ }while(0) void main(void) { int i = 123; int j = 123; HEX_PI(i); HEX_PI(j); DEC_PI(i); DEC_PI(j); } //i=0x7b,fuc:main,line:17 //j=0x7b,fuc:main,line:18 //i=123,fuc:main,line:20 //j=123,fuc:main,line:21
3. 配合宏開關在編譯前靜態指定打印等級函數
#if CUR_PLEVEL > 5post
#define TRC_PR(fmt, args...) fprintf(stderr," TRC_P(%s:%d):\t" fmt, __func__, __LINE__, ##args)url
#endifspa
4. 想要動態地指定打印等級,要使用相似內核打印的宏定義code
見另外一篇文章: 似linux內核的分等級DEBUG宏(打印宏)http://www.cnblogs.com/mylinux/p/5906576.htmlorm