日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

可变参数的宏定义

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可变参数的宏定义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

printf()和fprintf()這些輸出函數的參數是可變的,在調試程序時,你可能希望定義自己的參數可變的輸出函數,

那么可變參數宏會是一個選擇。

C99中規定宏可以像函數一樣帶有可變參數,比如

?

#define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__)

?

其中,...表示參數可變,__VA_ARGS__在預處理中為實際的參數集所替換

?

GCC中同時支持如下的形式

?

#define LOG(format, args...) fprintf(stdout, format, args)

?

其用法和上面的基本一致,只是參數符號有變化

?

有一點需要注意,上述的宏定義不能省略可變參數,盡管你可以傳遞一個空參數,這里有必要提到"##"連接符號的用法。

"##"的作用是對token進行連接,在上例中,format、__VA_ARGS__、args即是token,

如果token為空,那么不進行連接,所以允許省略可變參數(__VA_ARGS__和args),對上述變參宏做如下修改

?

#define LOG(format, ...) fprintf(stdout, format, ##__VA_ARGS__) #define LOG(format, args...) fprintf(stdout, format, ##args)

?

上述的變參宏定義不僅能自定義輸出格式,而且配合#ifdef #else #endif在輸出管理上也很方便,

比如調試時輸出調試信息,正式發布時則不輸出,可以這樣

?

#ifdef DEBUG #define LOG(format, ...) fprintf(stdout, ">> "format"\n", ##__VA_ARGS__) #else #define LOG(format, ...) #endif

?

在調試環境下,LOG宏是一個變參輸出宏,以自定義的格式輸出;

在發布環境下,LOG宏是一個空宏,不做任何事情。

?

From http://www.cnblogs.com/caosiyang/

轉載于:https://www.cnblogs.com/wzd5230/p/10959032.html

總結

以上是生活随笔為你收集整理的可变参数的宏定义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。