error:“.”: 宏形参表中的意外
程序员文章站
2022-06-30 11:32:30
...
error:“.”: 宏形参表中的意外
zhangbin
这种…的可变参数在windows和linux 是不一样的
打印的函数会用到
获取文件名
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
使用gcc 或者clang时
- ios android 都ok
- 使用了args…
/*C++11要求,当字符串跟变量连接的时候,必须fmt前后增加一个空格*/
#define LOG(level, fmt, args...) do{\
if (TransCommon::level <= TransCommon::syslog_level) \
Common::log(Common::level, "[AccessTransSdk][%s::%s():%d] " fmt , __FILENAME__, __FUNCTION__, __LINE__, ##args);\
} while (0)
- 但是这样,在win32上会报错
windows上直接…
- 在win32上,要这样写
////////////////////////////////////////////////////////////////////////
/// @brief 所有TR*功能均为Debug下输出调试信息,Win下输出到Output窗口,
/// linux下输出到cerr。
/// @remark Release下这些宏将不会被编译,请注意TR*不编译可能导致的副作用
////////////////////////////////////////////////////////////////////////
#de
fine LOGE(format,...) do { \
Comm::PlatLog(Comm::kLogError, Comm::kLogPlatform, format ,__VA_ARGS__); } while (0)
看下面的例子
/// @brief Trace
#if defined(_DEBUG) || defined(DEBUG)
# ifdef _WIN32
# define TR(...) sqr::DebugOut(__VA_ARGS__)
# else
# define TR(fmt, arg...) sqr::DebugOut(fmt, ##arg)
# endif
#else
# ifdef _WIN32
# define TR(...) __noop
# else
# define TR(fmt, arg...)
# endif
#endif
推荐阅读