C/C ++宏中的逗号传递给另一个宏 [英] Comma in C/C++ macro passed to another macro
本文介绍了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"
这正常吗?
推荐答案
这解决了我的问题
现在我正在使用
#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屋!
查看全文