C語言可變參數宏

歲月不饒人,這年紀大了記憶力真是差了不少。今天寫程序須要用到可變參數的宏,但是忘了怎麼寫,這倒也沒什麼,由於我一貫是不記憶這些語法細節的,反正我知道程序裏有個地方用到了這種技巧,可是可悲的是我忘了在哪一個地方。搜索?語法都忘了搜個P呀。只好憑着印象,在本身負責的模塊代碼中找了一圈,花了十幾分鍾才終於在日誌模塊找到。唉,看來仍是寫下來比較好,這記憶力實在是不能相信了。ide

 

C語言中,可變參數宏的寫法有以下幾種形式:spa

#define myprint_1(fmt, ...)     printf(fmt, __VA_ARGS__)日誌

#define myprint_2(fmt, ...)     printf(fmt, ##__VA_ARGS__)orm

#define myprint_3(fmt, arg...)  printf(fmt, ##arg)ci

 

int main(void)文檔

{it

    myprint_1("%s, %s, %d\r\n", __FILE__, __FUNCTION__, __LINE__);編譯

    myprint_2("%s, %s, %d\r\n", __FILE__, __FUNCTION__, __LINE__);table

    myprint_3("%s, %s, %d\r\n", __FILE__, __FUNCTION__, __LINE__);ast

    return 0;

}

 

注意:上面的三種形式在Windows+MinGW+GCC下編譯經過,可使用,可是在Tornado 2.2+VxWorks 6.5下,前面兩種形式編譯會出錯,只有最後一種是可用的。

 

說實話,網上關於C語言可變參數宏的文章浩如煙海,爲何還要本身寫一篇這種文檔?那就是網上的文章雖然不少,可是參差不齊,找到篇文章看半天后,還得本身驗證一下,實在是耗時耗力,而本身記錄下來的,是已經在程序中實際使用,通過驗證的代碼,其正確性、可用性固然毋庸置疑,看了一眼立刻就能拿來用,省時省力,實在是個好辦法。惟一的缺點就是要寫文檔,還要發表,有點麻煩,唉,那總也比處處翻代碼強啊。

相關文章
相關標籤/搜索