1. 程式人生 > >linux C巨集定義實現列印除錯資訊

linux C巨集定義實現列印除錯資訊

本文僅實現了三種巨集定義除錯

    #define LOG(s)                                   日誌顯示(檔名:行號}+日誌資訊

    #define ERROR(s)                            錯誤資訊位置(級別+檔名+函式名+行號+錯誤資訊)

   #define PrintArray2D(arr,m,n)         二維float陣列按行列列印顯示 

程式碼如下:

#include <stdio.h>
/**
 * 簡單列印除錯資訊
 */
#define DEBUG        1
#ifdef DEBUG
    //日誌顯示(檔名:行號}+日期
    #define LOG(s) printf("[%s:%d] %s\n", __FILE__, __LINE__, s)
	//錯誤資訊位置(級別+檔名+函式名+行號+錯誤資訊)
    #define ERROR(s)                                                                      \
	do{																					  \
	fprintf(stderr, "[ERROR  at:]%s %s(Line %d): %s\n",__FILE__,__FUNCTION__,__LINE__,s); \
	}while(0)  
    //二維float陣列列印顯示 
	#define PrintArray2D(arr,m,n)       \
	do                                  \
	{                                   \
		int  i = 0;                     \
		int  j = 0;                     \
		for(i=0;i<m;i++)                \
		{                               \
		  for(j=0;j<n;j++)              \
		  {                             \
		   printf("%f  ",arr[i][j]);    \
		  }                             \
		   printf("\n");                \
		}                               \
	}while(0)

#else
    //日誌不顯示
    #define LOG(s)  NULL 
    //二維float陣列列印不顯示 
    #define PrintArray2D(arr,m,n)       NULL
    //錯誤資訊不顯示
    #define ERROR(s)          NULL                     
#endif

對此三種加上了條件編譯判斷,只有當DEBUG定義後,才顯示具體錯誤資訊,除錯陣列顯示資訊,否則一律為NULL,即不顯示

當除錯時,在該標頭檔案上方加入:#define DEBUG        1 語句即可

當不除錯改為發行版本時,註釋該語句

當然,還應該有一個時間顯示的巨集,但由於需要加入標頭檔案<time.h>,所以本次測試未測試該巨集語句

讀者可能在採用本程式碼時出現巨集定義錯誤情況,出現錯誤原因可能是 接續符“\"沒有嚴格為反斜槓 

或者是位置錯誤引起的,此時在VC或者DEV環境下稍加除錯即可