1. 程式人生 > >巨集定義變參printf

巨集定義變參printf

經常在實際的除錯過程中,使用最基本的除錯方法printf,但是常常需要在print函式中使用引數__FILENAME__、__FUNCTION__、__LINE__,特別是大型的專案中,感覺在編碼時重複寫入這幾個引數有些繁瑣,所以很自然的想到了巨集定義,當然你也可以參照printf函式寫自己的My_Printf函式,但是不想費周折就使用巨集定義吧!程式碼如下:

環境 標準C99,GNC

#define PRT(...) printf("Filename %s, Function %s, Line %d > ", __FILE__, __FUNCTION__, __LINE__); \
                            printf(__VA_ARGS__); \
                            printf("\n");

測試程式碼:

#include <stdarg.h>
#include <stdio.h>

#define PRT(...) printf("Filename %s, Function %s, Line %d > ", __FILE__, __FUNCTION__, __LINE__); \
                            printf(__VA_ARGS__); \
                            printf("\n");

int main()

   int a =0;
   PRT("a");
    PRT("hello, %d ", 10);
    PRT("%d, %s, %d", 10, "dafdsa", 20);
    return 0;
}
 

測試結果:

[email protected]:/home/ybq/Desktop# gcc printf.c -o printf
[email protected]:/home/ybq/Desktop# ./printf
Filename printf.c, Function main, Line 22 > a
Filename printf.c, Function main, Line 23 > hello, 10
Filename printf.c, Function main, Line 24 > 10, dafdsa, 20

文章記錄在這裡,沒有什麼技術含量,但是挺實用的,在這裡給大家分享一下,希望它能給大家帶來便利!

推薦使用這個巨集:

#define DVR_PRT(format,...)  printf("[File:"__FILE__", Line:%d]  "format, __LINE__, ##__VA_ARGS__)

#define PRT(format,...)  printf("[File:%s, Line:%d] "format, __FILE__, __LINE__, ##__VA_ARGS__)


相關推薦

巨集定義printf

經常在實際的除錯過程中,使用最基本的除錯方法printf,但是常常需要在print函式中使用引數__FILENAME__、__FUNCTION__、__LINE__,特別是大型的專案中,感覺在編碼時重複寫入這幾個引數有些繁瑣,所以很自然的想到了巨集定義,當然你也可以參照pr

關於移植過程中,存在大量LCD log(不定形...)等除錯屬性函式巨集定義printf

嵌入式開發過程中,遇到移植第三方協議棧,有時存在大量LCD log等除錯屬性函式。我們希望儲存原生的除錯輸出資訊,通過對LCDlog等除錯功能進行printf重新巨集定義。 在第三方程式存在大量的除錯屬性函式,如: #define  LCD_UsrLog(format,

C語言函式巨集定義分析

)bnd一般取3(32位cpu)或7(64位cpu) 。以32位cpu為例:~(bnd) = 0xfffffffc,該值相當於一個掩碼,使任何數與它相與後的結果都是4的倍數,這也正好吻合32位cpu入棧時4位元組對齊的特點;(sizeof (X)) + (bnd) = sizeof(X) + 3,保證了不

day18 函數定義數;名稱空間;全局量及局部量。

意思 加載 **kwargs 方式 nbsp span 接收 none 默認 Python之路,Day6 = Python基礎6 函數的定義 def func1(): # 定義一個函數,名字叫func1,括號中沒有傳入參數 pri

Mysql儲存過程2:定義數傳遞

變量定義 color ted lec mysq 傳遞 參數傳遞 fault 可選 #儲存過程 中的變量定義 declare 變量名 類型 可選類型 -- 跟建表差不多 create procedure p() begin declare age int de

超前引用不可使用類名來定義量和函數的數,只可用來定義引用或者指針。

引用 使用 nbsp lin 類名 users undefined error eight C:\Users\Administrator\Documents\TreeView\mainwindow.h:31: error: C2079: ‘MainWindow::mytre

除錯技巧:封裝printf列印除錯資訊和巨集定義開關

/* #define DEBUG */ #ifdef DEBUG #define DEBUG_ERR(format, ...) \ do{ \ printf("\r\n"); \ printf("FILE: "__FILE__", LINE: %

如何通過 讀取配置引數 而不是 預編譯 巨集定義方式 來決定是否執行printf函式

在一個專案中,本來開始決定通過巨集定義方式來決定是否進行 printf 列印除錯資訊的,但後面考慮到使用配置引數的方式應該更好,因為通過巨集定義方式,還需要再編譯一遍程式才能進行顯示,而通過讀取配置引數方式,只需要在配置檔案中更改配置項即可,這樣更符合實際需要。  大致思路:先將需要列

c語言的使用 可變引數巨集 標準預定義巨集

gcc的預處理提供的可變引數巨集定義真是好用: #ifdef DEBUG #define dbgprint(format,args...) / fprintf(stderr, format, ##args) #else #define dbgprint(fo

【銳捷筆試題】將整形變數a的最高n位清零,其它位不巨集定義:#define clear_bits(a,n)

銳捷昨天的一道網際網路C++筆試題,我的寫法如下: #define clear_bits(a,n)  (a)&~(((1<<n)-1)<<(32-n))  注:1、n應該加上括號,上面括號比較多,再寫上比較混亂,所以沒給n寫上括號,大家寫的

(不定)的巨集函式

1.可變的巨集是具有不定引數的巨集。這些引數用...代表,被儲存到__VA_ARGS__中。他會在內部進行擴充套件。 #defien err(...) fprintf(stderr, __AV_

標準函式的重新封裝,如printf

寫一個函式封裝printf用作trace 方法一: #include <stdio.h> #include <stdarg.h> void my_trace(const char *cmd, ...) { printf("%s %s

C/C++中巨集使用(關於## 和...巨集

 替換為: fprintf(stderr,"Error!/n",);這是一個語法錯誤,不能正常編譯。這個問題一般有兩個解決方法。首先,GNU CPP提供的解決方法允許上面的巨集呼叫寫成:myprintf(templt);而它將會被通過替換變成:fprintf(stderr,"Error!/n",);很明顯,這

巨集超程式設計——技術——巨集

獲取變引數巨集的個數 #define TL_VARIADIC_SIZE(...) TL_CAT(TL_VARIADIC_SIZE_I(__VA_ARGS__, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),) #define TL_VARIADI

巨集定義開關和debug printf巨集定義使用異或交換兩數

1、巨集定義開關和debug printf #define DEBUG_PRINT 1 #ifdef DEBUG_PRINT #define DEBUG(format, ...) printf("FILE: "__FILE__", LINE: %d: "format"\

定義“學習數”的

學習 none con bsp dict span 直接 模型 如果 學習參數的定義與輸入的定義很像,分為直接定義和字典定義兩種方法,如果參數過多的話,那麽便會采用第二種定義。 直接定義: 1 W = tf.Variable(tf.random_normal([1]

在Echarts 柱形圖的單擊事件中寫入自定義

cnblogs img ges == innerhtml .com echart 通過 code

修改MySQL高可用模塊接收自定義VIP

mysql 高可用 mha 但凡是MySQL DBA肯定都聽說過MHA個高可用方案,而且很多公司都是通過對MHA做二次開發來實現MySQL高可用的。如果MHA不結合VIP的話,每次主庫切換都需要程序修改連數據庫的配置,這樣比較麻煩。而采用MHA+VIP的方式時可以在主庫切換的過程中讓VIP

存儲過程的使用——定義

定義 變量 use set upd 定義變量 lar bold sel 一、定義變量 --簡單賦值 declare @a int set @a=5 print @a --使用select語句賦值 declare @user1 nvarchar(50) sel

smarty模板自定義

charset -c 1.0 截取字符串 p s mysqli 參數 gin plugin 一、通過smarty方式調用變量調節器 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt