C++ 中几个帮助调试的宏
2022/2/23 22:52:27
本文主要是介绍C++ 中几个帮助调试的宏,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++ 中几个帮助调试的宏
1. assert(expr)预处理宏
assert是一种预处理宏,它使用一个表达式作为它的条件;首选对expr求值,如果expr为flase(即0),assert输出信息并终止程序的执行,如果为true 则什么也不做。assert包含在cassert头文件中。
#include <cassert> int main(){ assert(5==6); return 0; }
以上代码会在Debug模式下中断程序并输出Assertion failed: 5 == 6, file C:\Users\asus\source\repos\ConsoleApplication5\ConsoleApplication5.cpp, line 3
2. NDEBUG预处理变量
assert的行为依赖于NDEBUG的预处理变量,查看vs中assert的实现代码如下。
#ifdef NDEBUG #define assert(expression) ((void)0) #else _ACRTIMP void __cdecl _wassert( _In_z_ wchar_t const* _Message, _In_z_ wchar_t const* _File, _In_ unsigned _Line ); #define assert(expression) (void)( \ (!!(expression)) || \ (_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), 0) \ ) #endif
由此可见,如果我们定义了NDEBUG预处理变量,assert就什么也不作。我们可以使用#define 定义NDEBUG。
#define NDEBUG int main(){ assert(5==6);//此时不执行。 }
在VS中程序在Release模式下默认定义了NDEBUG,因此我们可以在代码中利用NDEBUG编写调试代码,程序在发布Relese版时,将忽略这些代码。
3. _ _ func_ _
__ func__是编译器定义的一个局部静态变量,用于存放函数的名字。
#include<iostream> void funcTest(){ std::cout << "函数名为: " <<__func__<< std::endl; } int main(){ funcTest();//输出 函数名为:funcTest }
4. __ FILE__
存放文件名的字符串字面值,例如我们的main函数保存在C盘下的main.cpp中,则以下代码输出 C:\main.cpp;
#include<iostream> int main(){ std::cout << __FILE__ << std::endl; return 0; }
5.__ LINE__
存放当前行号的整型字面值,下面代码输出 3
#include<iostream> int main(){ std::cout << __LINE__ << std::endl; return 0; }
6.__ TIME__
存放文件编译时间。
#include<iostream> int main(){ //输出当前文件的编译时间 std::cout << __TIME__ << std::endl; return 0; }
7. __ DATE__
文件的编译日期
#include<iostream> int main(){ //输出当前文件的编译日期 std::cout << __TIME__ << std::endl; return 0; }
这篇关于C++ 中几个帮助调试的宏的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01巧用 TiCDC Syncpoint 构建银行实时交易和准实时计算一体化架构
- 2024-05-01银行核心背后的落地工程体系丨Oracle - TiDB 数据迁移详解
- 2024-04-26高性能表格工具VTable总体构成-icode9专业技术文章分享
- 2024-04-16软路由代理问题, tg 无法代理问题-icode9专业技术文章分享
- 2024-04-16程序猿用什么锅-icode9专业技术文章分享
- 2024-04-16自建 NAS 的方案-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数, 加上remote_src: yes 配置-icode9专业技术文章分享
- 2024-04-14ansible 检测远程主机的8080端口,如果关闭,则echo 进程已关闭-icode9专业技术文章分享
- 2024-04-14result 成功怎么写-icode9专业技术文章分享