网站开发的语言做网站个人
news/
2025/9/29 21:36:17/
文章来源:
网站开发的语言,做网站个人,建设银行人才招聘官方网站,泉州seo-泉州网站建设公司From: http://www.cnblogs.com/caosiyang/archive/2012/08/21/2648870.html printf()和fprintf()这些输出函数的参数是可变的#xff0c;在调试程序时#xff0c;你可能希望定义自己的参数可变的输出函数#xff0c;
那么可变参数宏会是一个选择。
C99中规定宏可以像函数…From: http://www.cnblogs.com/caosiyang/archive/2012/08/21/2648870.html 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宏是一个空宏不做任何事情。 ----------------------------------- 以下为自己整理的代码 -------------------------
宏定义 #ifdef DEBUG#define OSI_Debug(ERRLEVEL, fmt, ...) do { printf(%d: fmt, ERRLEVEL, ##__VA_ARGS__); } while(0)
#else#define OSI_Debug(...)
#endif具体调用举例OSI_Debug(DLEVEL_WARNNING, m_pTransmitter is NULL!!! \n);
OSI_Debug(DLEVEL_WARNNING, Waring m_pTransmitter status mode [%d]!!\n, m_pTransmitter-mode());
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922267.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!