C/C ++宏中的逗号传递给另一个宏 [英] Comma in C/C++ macro passed to another macro

查看:136
本文介绍了C/C ++宏中的逗号传递给另一个宏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我拥有这些在Visual Studio 2015中生成错误的宏.

I have these macros which generate error in Visual Studio 2015.

#define log_params  __FILE__, __LINE__
#define log(file, line, message, ...) _snprintf_s(nullptr, 0, 0, message,  __VA_ARGS__)

现在称此为永远无效

 log(log_params, "testing %d", 4)

有什么想法吗? 我还检查了预处理器的输出,它是:

Any thoughts? I also checked output of preprocessor and it is:

_snprintf_s(nullptr, 0, 0, 4 );

编辑1 有趣的发现

#define log(file, line, message, ...) file line

会产生这个:

"service.cpp", 164 "testing %d"

这正常吗?

推荐答案

这解决了我的问题

__VA_ARGS__使用MSVC扩展

现在我正在使用

 #define EXPAND( x ) x
 #define Log_printf( file_name,line, message,...)  _snprintf_s(nullptr, 0,0,message, __VA_ARGS__)
 #define Log(...) EXPAND (Log_printf(__VA_ARGS__))

这篇关于C/C ++宏中的逗号传递给另一个宏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆