如何在宏中使用vsprintf / vsnprintf?
|
我正在尝试编写一个宏来简化LOG4CPLUS的使用。但是在编写宏时遇到了一些麻烦。
这是我的cpp文件中的内容:
Logger logger = Logger::getInstance(\"ManagerServer\");
之后,我可以这样记录一行:
LOG4CPLUS_ERROR(logger, logEvent);
我只想编写一个宏,然后才能将logEvent更改为一些可变参数。并像这样使用:
LogErr(\"failed\");
LogErr(\"failed times %d\", iTimes);
所以,我这样写:
#define LogErr(fmt, args...)\\
do {\\
char szBuf[MAX_LOG_BUFFER_SIZE];\\
memset(szBuf, 0, MAX_LOG_BUFFER_SIZE); \\
vsnprintf(szBuf, MAX_LOG_BUFFER_SIZE, fmt, ##args); \\
LOG4CPLUS_ERROR(logger, szBuf);\\
} while(0)
但是当我编译的时候。 g ++给我这个信息:
错误:\')\'令牌之前的预期主表达式
有谁能帮助我吗?对此,我真的非常感激。
没有找到相关结果
已邀请:
4 个回复
邪罗逢确胃
同样,您也不能像尝试那样在宏内使用
函数:预处理器不了解变量参数,因此广告无法创建type7ѭ类型的对象。 在C99中,执行您要尝试执行的操作的一种方法是
注意:
和
届甸衬丝蚕
另外,我不知道g ++当前是否支持可变参数宏,它是C ++ 11的功能。 (不过,我相信C编译器支持它们)。
镀建啼
再次感谢!
抹持奠糙驰
如果您仍想以其他方式重新实现,请参阅loggingmacros.h以获取实现详细信息。