在c的除錯中,有幾個巨集經常被使用來輔助程式設計師進行程式除錯,這裡對之進行簡單介紹。
1、__function__
該巨集被用來表示呼叫該巨集的函式。
2、__line__
該巨集用來表示呼叫該巨集的對應行數。
3、__time__
該巨集用來表示呼叫該巨集時的時間。
4、__date__
該巨集用來表示呼叫該巨集的日期。
5 、__file__
該巨集用來表示呼叫該巨集的檔案。
示例程式:
# include
#include
void test(void)
int main()
也可以通過巨集定義的方式來使用上述的巨集:
#define xx_debug(fmt,arg...)printf("<>[%s] [%d] "fmt"\n",__function__,__line__, ##arg)
但有時,列印資訊太多會增加我們查詢對應資訊的難度,這裡我介紹一下如何使自己的printf列印出有顏色的字型。
先介紹一下控制字元的通用格式:
esc[;...m
其中,
esc為轉移字元,其值為「\033」;
[為常量的左中括號;
;... 是若干屬性, 通常是由乙個有特定意義的數字代替, 每個屬性之間用分號分隔;
m 就是字面常量字元m;
因此,printf的格式便可設為如下格式:
printf("\033[字背景顏色;字型顏色m 字串 \033[0m" );
其中\033[0m 是對之前顏色設定的結束,恢復到終端原來的背景色和字型色,以免之前的設定改變別的printf的格式。
接下來對各種屬性進行介紹:
ansi控制碼的介紹:
\033[0m 關閉所有屬性 ,即終結之前的顏色設定,恢復到終端的原本背景色和字型色
\033[1m 設定高亮度
\03[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[30m -- \033[37m 設定前景色
\033[40m -- \033[47m 設定背景色
\033[na 游標上移n行
\03[nb 游標下移n行
\033[nc 游標右移n行
\033[nd 游標左移n行
\033[y;xh設定游標位置
\033[2j 清屏
\033[k 清除從游標到行尾的內容
\033[s 儲存游標位置
\033[u 恢復游標位置
\033[?25l 隱藏游標
\33[?25h 顯示游標
顏色**:
字背景顏色範圍: 40--49 字顏色: 30—39
40: 黑 30: 黑
41: 紅 31: 紅
42: 綠 32: 綠
43: 黃 33: 黃
44: 藍 34: 藍
45: 紫 35: 紫
46: 深綠 36: 深綠
47: 白色
37: 白色
因此,debug的printf最終可改為
#define xx_debug(fmt,arg...) \
printf("\033[字背景顏色;字型顏色m
<>[%s] [%d]\033[0m \033[字型顏色m"fmt"\033[0m\n",__function__,__line__, ##arg)
程式如下:
#include
#define xx_debug(fmt,arg...) \
printf("\033[41;32m <>[%s] [%d]\033[0m \033[34m"fmt"\033[0m\n",__function__,__line__, ##arg)
int main()
執行結果如圖:
ps:設定後的結果和終端有一定的關係。
C 巨集的一些筆記
define n2 2 僅僅是字串替換 define n 2 2 也是字串,但是是 2 2 define area x x x 帶參的巨集定義參會當作字串直接替換 三種特殊的符號 define tochar x x 就是加上單引號,越界會報錯 pragma可以說是c 中最複雜的預處理指令了,下面是最...
一些簡單方便易用的C除錯用巨集
最近在寫乙個 os 相關的小專案,引入了乙個很好用的標頭檔案debug.h,裡面定義了很多方便執行除錯的巨集,記錄和分享一下。注意博主是在linux環境下程式設計使用到的,至於在mingw和vs等環境下能否使用,博主沒有嘗試過,歡迎討論。首先定義除錯巨集以開啟除錯巨集 define debug然後在...
C巨集 define的一些用法
c語言中的 define命令,在編譯預處理時進行簡單的字元替換。其使用的一般形式為 define 識別符號 字串 其中的 表示這是一條預處理指令。凡是以 開頭的均為預處理命令。define 為巨集定義命令。識別符號 為所定義的巨集名。字串 可以是常數 表示式 格式串等。1.最常見的一種用法也是最簡單...