#include <iostream>
#include <sstream>
#define DebugVars(...) DEBUG_VARS(__FILE__, __LINE__, __FUNCTION__, #__VA_ARGS__,__VA_ARGS__)
void Log(const char* file, const int line, const char* func, const std::string& message)
{
printf("file:%s, line:%d, func:%s, message:%s \n", file, line, func, message.c_str());
}
template < typename... Args>
void DEBUG_VARS(const char* file, const int line, const char* func, const std::string& names, Args&&... args)
{
std::stringstream names_ss;
for (const char& c : names )
{
if (c == ','){
names_ss << " ";
continue;
}
names_ss << c;
}
std::string name;
std::ostringstream ss;
ss << "\n";
using expander = int[];
(void) expander { 0, (
names_ss >> name, ss << name << ": " << args << "\n"
,0) ...};
Log(file, line, func, ss.str());
}
int main()
{
int number = 37;
float pie = 3.14;
std::string str = "test string";
DebugVars(number, pie, str);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KCiNkZWZpbmUgRGVidWdWYXJzKC4uLikgREVCVUdfVkFSUyhfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgI19fVkFfQVJHU19fLF9fVkFfQVJHU19fKQoKdm9pZCBMb2coY29uc3QgY2hhciogZmlsZSwgY29uc3QgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKQp7CiAgICBwcmludGYoImZpbGU6JXMsIGxpbmU6JWQsIGZ1bmM6JXMsIG1lc3NhZ2U6JXMgXG4iLCBmaWxlLCBsaW5lLCBmdW5jLCBtZXNzYWdlLmNfc3RyKCkpOwp9Cgp0ZW1wbGF0ZSA8IHR5cGVuYW1lLi4uIEFyZ3M+CnZvaWQgREVCVUdfVkFSUyhjb25zdCBjaGFyKiBmaWxlLCBjb25zdCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuYywgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWVzLCBBcmdzJiYuLi4gYXJncykKewogICAgCiAgICBzdGQ6OnN0cmluZ3N0cmVhbSBuYW1lc19zczsKCWZvciAoY29uc3QgY2hhciYgYyA6IG5hbWVzICkKCXsKCQlpZiAoYyA9PSAnLCcpewoJCQluYW1lc19zcyA8PCAiICI7CgkJCWNvbnRpbnVlOwoJCX0KCQluYW1lc19zcyA8PCBjOwoJfQoJCglzdGQ6OnN0cmluZyBuYW1lOwogICAgc3RkOjpvc3RyaW5nc3RyZWFtIHNzOwogICAgc3MgPDwgIlxuIjsKICAgIHVzaW5nIGV4cGFuZGVyID0gaW50W107CiAgICAodm9pZCkgZXhwYW5kZXIgeyAwLCAoCiAgICAgICAgICBuYW1lc19zcyA+PiBuYW1lLCBzcyA8PCBuYW1lIDw8ICI6ICIgPDwgYXJncyA8PCAiXG4iCgogICAgLDApIC4uLn07CiAgICBMb2coZmlsZSwgbGluZSwgZnVuYywgc3Muc3RyKCkpOwogICAgCn0KCmludCBtYWluKCkKewogICAgaW50IG51bWJlciA9IDM3OwogICAgZmxvYXQgcGllID0gMy4xNDsKICAgIHN0ZDo6c3RyaW5nIHN0ciA9ICJ0ZXN0IHN0cmluZyI7CgogICAgRGVidWdWYXJzKG51bWJlciwgcGllLCBzdHIpOwogICAgcmV0dXJuIDA7Cn0K