c++11支持在宏定义中使用__VA_ARGS__代表不定参数中的"...",具体例子如下:
#include<iostream>
#define LOG(...) {\
fprintf(stderr, "%s :Line %d :\t", __FILE__, __LINE__);\
fprintf(stderr, __VA_ARGS__);\
fprintf(stderr, "\n");\
}
//#if __cplusplus < 201103L
//#error "should use c++11 implementation"
//#endif
int main()
{
const long long ll_min = LLONG_MIN;
const long long ll_max = LLONG_MAX;
unsigned long long ull_max = ULLONG_MAX;
static_assert(ll_min && ll_max);
LOG("ll_min = %lld", ll_min);
LOG("ll_max = %lld", ll_max);
LOG("ull_max = %llu", ull_max);
return 0;
}
其中__VA_ARGS__代表了不定参数。
这样做的好处显而易见,可以更方便的定义宏函数,比如上述LOG函数,实际工作中对于轻量级的调试,帮助很大,可以快速定位。
代码输出如下:
欢迎交流与讨论。