C++ 输出代码所在的文件、行数以及函数名称
2016-08-17 17:45
811 查看
在输出调试信息的时候,经常会用到这几个宏。首先看一段示例代码,再来介绍这几个宏:
1) __VA_ARGS__ 是一个可变参数的宏,总体来说就是将左边宏中 ... 的内容原样抄写在右边 __VA_ARGS__ 所在的位置。
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__ 宏在预编译时会替换成当前的行号
4) __FUNCTION__ 宏在预编译时会替换成当前的函数名称
5)类似的宏还有__DATE__, __TIME__,__STDC__, __TIMESTAMP__等,可以当作一个变量来使用。
关于宏##的有关解析,在另一篇文章有介绍:http://blog.csdn.net/hellokandy/article/details/50592971
上述代码中定义的DEBUG_INFO宏,就是输出控制台的调试信息。比如说,我们通过 OutputDebugString 输出调试信息这样写:
#include <stdlib.h> #include <stdio.h> //替换函数名 #ifndef _DEBUG #define LOGFUNC(...) ((void)0) #else #define LOGFUNC(...) (printf(__VA_ARGS__)) #endif //宏前面加上##的作用在于:当可变参数的个数为0时,这里的## 起到把前面多余的","去掉的作用 #define DEBUG_INFO(format, ...) printf("File:%s, Line:%d, Function:%s, %s", \ __FILE__, __LINE__ , __FUNCTION__, ##__VA_ARGS__); void show_debug_info() { DEBUG_INFO("%s", "hello world"); } int main() { LOGFUNC("%s\n", "this is test"); show_debug_info(); system("pause"); return 0; }
1) __VA_ARGS__ 是一个可变参数的宏,总体来说就是将左边宏中 ... 的内容原样抄写在右边 __VA_ARGS__ 所在的位置。
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__ 宏在预编译时会替换成当前的行号
4) __FUNCTION__ 宏在预编译时会替换成当前的函数名称
5)类似的宏还有__DATE__, __TIME__,__STDC__, __TIMESTAMP__等,可以当作一个变量来使用。
关于宏##的有关解析,在另一篇文章有介绍:http://blog.csdn.net/hellokandy/article/details/50592971
上述代码中定义的DEBUG_INFO宏,就是输出控制台的调试信息。比如说,我们通过 OutputDebugString 输出调试信息这样写:
#ifdef _DEBUG #define OUTPUT_DEBUGW(fmt, ...) PrintDebugStringW(_T(__FILE__),__LINE__, fmt, __VA_ARGS__) #else #define OUTPUT_DEBUGW ((void)0) #endif void PrintDebugStringW(const wchar_t *file, int lineno, const wchar_t *pszFmt, ...) { va_list vlArgs = NULL; va_start(vlArgs, pszFmt); size_t nLen = _vscwprintf(pszFmt, vlArgs) + 1; wchar_t *strBuffer = new wchar_t[nLen]; _vsnwprintf_s(strBuffer, nLen, nLen, pszFmt, vlArgs); va_end(vlArgs); //OutputDebugStringW(strBuffer); wchar_t buf[4096]; swprintf_s(buf, 4096, L"%s<%d>: tid[%d] :\t%s\n", file, lineno, GetCurrentThreadId(), strBuffer); OutputDebugStringW(buf); delete [] strBuffer; }
相关文章推荐
- C++ 输出代码所在的文件、行数以及函数名称
- 获取bash文件所在的目录绝对路径以及获取函数方法名称
- c++输出当前所在文件、所在方法、所在行数
- C/C++打印当前代码所在文件、所在行和函数
- Javascript中获取出错代码所在文件及行数的代码
- c++源代码:输出文件内容显示行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- C/C++ 获取代码执行的行数以及文件名
- 输出文件执行的行数和文件名 c++实现
- C++中的文件输入/输出(6):一些有用的函数
- 练习写C++代码(101)--简单的文件以及 .gz文件的读写
- C++ 读写文件,格式化输出到文件的简单代码
- C++中的文件的输入输出函数应用实例
- linux系统中用一条命令 查找/data目录及子目录下 内容包含 “hello” 的所有文件名称 及 所在行数
- PHP获取指定函数定义在哪个文件中以及其所在的行号实例
- C# 获取当前文件名、执行函数、执行代码行数和列数
- [C/C++]_[初级]_[使用C字符串(或者std::string)处理函数获取文件所在目录
- php代码执行文件重命名函数的权限以及参数
- C/C++:递归使用:使用递归反向写文件(例子)以及字符串翻转输出
- C++ - 库函数优先级队列(priority_queue)输出最小值 代码