欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
相关标签: windows环境编程