C中幾個特定巨集的介紹 一些除錯的小技巧

2021-08-07 11:06:34 字數 2537 閱讀 7686

在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.最常見的一種用法也是最簡單...