打印宏
开发程序的时候,为了调试方便,添加打印,为了定位错误点,则希望打印的时候有函数名和行号信息。
可以通过把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) |
网友评论