C語言中除錯用到的巨集定義

2021-08-02 14:41:27 字數 1380 閱讀 4715

在linux程式設計中,當檔案數量變的眾多之後,使用gdb除錯就是一場災難。因此在程式中加入合理的列印資訊,定位錯誤出現的檔名,函式名,行號等資訊,能更高效的定位到問題的所在。

下面定義了巨集,分別是warning,info,error,show_time,debug等。利用了 __file__,_function__, __line__等變數。。。

_file____function____line__從名字可以直接看出來了,對應:**

檔案

函式

行號

。__time__ ,__date__,對應:檔案編譯時間 

, 編譯日期.

下面就是定義的巨集:

#define error(...) /  

dowhile(0)

#define warning(...) /

dowhile(0)

#define info(...) /

dowhile(0)

#define show_time(...) /

do /

glatesttime = now;/

}while(0)

#ifdef debug

#define dbg(...) /

dowhile(0)

#else

#define dbg(...)

#endif

以上是定義的輸出檔案資訊,如果想輸出自定義的字串(類似printf()的功能),可以使用可變參的形式傳遞。

如上面的的最後乙個debug的定義:

fprintf(stdout , __va_args__); 

這行**使得使用者可以將自己的資訊放在可變參裡面,例如:dbg("  i am from  %s " , "ict"); 這句話的輸出分成兩部分,前半部分列印檔案名、函式名、行號,後半部分會輸出:i am from ict  這句話。可變參給使用者提供了很好的自定義空間。 

說明:

stdout -- 標準輸出裝置 (printf("..")) 同 stdout。 

stderr -- 標準錯誤輸出裝置 兩者預設向螢幕輸出。 

但如果用轉向標準輸出到磁碟檔案,則可看出兩者區別。stdout輸出到磁碟檔案,stderr在螢幕。

c 語言中的巨集定義

巨集定義 巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯 1.不帶引數的巨集定義 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define 識別符號 字串 其中的識別符號就是所謂的 符號常量,也稱為 巨集名 預處理 預編譯 工作也叫做巨集展開 將巨...

C語言中的巨集定義

下列c 中包含兩種巨集定義,例如 include define max connection 1000 define mng port 5000 define min a,b a b a b define max a,b a b a b int main 方法1 gcc e 引數預編譯 gcc e ...

C語言中的巨集定義

c語言中的巨集定義 c語言中的巨集定義也叫做預處理命令,預處理命令是c語言本身的組成部分,不能直接對它們進行編譯。1.基本概念 1 預處理不是c語句,是在編譯前進行的 2 預處理功能主要用於下3種情況 巨集定義 檔案包含 條件編譯 3 巨集是在編譯前進行的,程式不能直接對它們進行編譯,由預處理程式先...