error:“.”: 宏形参表中的意外

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 (TDCommon::level <= TDCommon::syslog_level) \
    Common::log(Common::level, "[TDSDK][%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
发布了693 篇原创文章 · 获赞 58 · 访问量 220万+

猜你喜欢

转载自blog.csdn.net/commshare/article/details/104714082