C语言可变参数宏
歲月不饒人,這年紀大了記憶力真是差了很多。今天寫程序需要用到可變參數的宏,可是忘了怎么寫,這倒也沒什么,因為我一向是不記憶這些語法細節的,反正我知道程序里有個地方用到了這種技巧,但是可悲的是我忘了在哪個地方。搜索?語法都忘了搜個P呀。只好憑著印象,在自己負責的模塊代碼中找了一圈,花了十幾分鐘才終于在日志模塊找到。唉,看來還是寫下來比較好,這記憶力實在是不能相信了。
?
C語言中,可變參數宏的寫法有如下幾種形式:
| #define myprint_1(fmt, ...)???? printf(fmt, __VA_ARGS__) #define myprint_2(fmt, ...)???? printf(fmt, ##__VA_ARGS__) #define myprint_3(fmt, arg...)? printf(fmt, ##arg) ? int main(void) { ??? myprint_1("%s, %s, %d\r\n", __FILE__, __FUNCTION__, __LINE__); ??? myprint_2("%s, %s, %d\r\n", __FILE__, __FUNCTION__, __LINE__); ??? myprint_3("%s, %s, %d\r\n", __FILE__, __FUNCTION__, __LINE__); ??? return 0; } |
?
注意:上面的三種形式在Windows+MinGW+GCC下編譯通過,可以使用,但是在Tornado 2.2+VxWorks 6.5下,前面兩種形式編譯會出錯,只有最后一種是可用的。
?
說實話,網上關于C語言可變參數宏的文章浩如煙海,為什么還要自己寫一篇這種文檔?那就是網上的文章雖然很多,但是良莠不齊,找到篇文章看半天后,還得自己驗證一下,實在是耗時耗力,而自己記錄下來的,是已經在程序中實際使用,經過驗證的代碼,其正確性、可用性當然毋庸置疑,看了一眼馬上就能拿來用,省時省力,實在是個好辦法。唯一的缺點就是要寫文檔,還要發表,有點麻煩,唉,那總也比到處翻代碼強啊。
總結
- 上一篇: file js new 传到后台_JS读
- 下一篇: servlet与MySQL商品管理系统_