美文网首页
打印宏_兼容windows和linux平台_封装printf

打印宏_兼容windows和linux平台_封装printf

作者: book_02 | 来源:发表于2018-12-01 14:40 被阅读6次

打印宏

开发程序的时候,为了调试方便,添加打印,为了定位错误点,则希望打印的时候有函数名和行号信息。
可以通过把printf封装成打印宏形式来达到目的。

为了在linux和windows平台都能使用,可使用如下代码:

#define LOG_INFO(fmt, ...) printf(("%s(%d)\t" fmt "\n"), __FUNCTION__, __LINE__, ##__VA_ARGS__)

__FUNCTION__ 函数名
__LINE__ 行号

linux 平台的注意事项

之所以把##放在__VA_ARGS__前,因为在linux平台下,如果打印的时候可变参数被忽略或为空,即没有...部分,如果使用的是__VA_ARGS__,而不是##__VA_ARGS__,会被解析成pirntf(fmt, ),多了一个逗号,,##操作将使预处理器(preprocessor)去除掉它前面的那个逗号。

windows 平台的注意事项

低版本的vs编译器不支持可变参数宏...,可以通过宏_MSC_VER来判断,_MSC_VER>=1400都支持...,现在大部分都支持。
_MSC_VER对应关系如下:

MS VC++ _MSC_VER Visual Studio
MS VC++ 15.0 _MSC_VER = 1910 (Visual Studio 2017)
MS VC++ 14.0 _MSC_VER = 1900 (Visual Studio 2015)
MS VC++ 12.0 _MSC_VER = 1800 (VisualStudio 2013)
MS VC++ 11.0 _MSC_VER = 1700 (VisualStudio 2012)
MS VC++ 10.0 _MSC_VER = 1600 (VisualStudio 2010)
MS VC++ 9.0 _MSC_VER = 1500 (VisualStudio 2008)
MS VC++ 8.0 _MSC_VER = 1400 (VisualStudio 2005)
MS VC++ 7.1 _MSC_VER = 1310 (VisualStudio 2003)
MS VC++ 7.0 _MSC_VER = 1300 (VisualStudio .NET)
MS VC++ 6.0 _MSC_VER = 1200 (VisualStudio 98)
MS VC++ 5.0 _MSC_VER = 1100 (VisualStudio 97)

相关文章

网友评论

      本文标题:打印宏_兼容windows和linux平台_封装printf

      本文链接:https://www.haomeiwen.com/subject/vezlcqtx.html