C++断言与静态断言

更新时间:2023-05-17 12:10:18 阅读: 评论:0

C++断⾔与静态断⾔
  断⾔是很早之前就有的东西了,只需要引⼊casrt头⽂件即可使⽤。往往asrt被⽤于检查不可能发⽣的⾏为,来确保开发者在调试阶段尽早发现“不可能”事件真的发⽣了,如果真的发⽣了,那么就表⽰代码的逻辑存在问题。最好的⼀点就是,断⾔只在Debug中⽣效,因此对于Relea版本是没有效率上的影响的。 
#include <iostream>
#include <casrt>
using namespace std;
int main() {
int i = 22;
asrt(i != 22);
system("pau");
最新防疫政策return0;
}
张家口坝上  上⾯的代码就表⽰,你确认在这⾥i⼀定不会等于22,如果事实上真的是22,那么程序就会⽆情地被abort,并报告出现问题的源⽂件和⾏号(使⽤了魔法常量__FILE__和__LINE__),有助于及时定位问题。
  断⾔有⼀个问题,就是⼀定会abort,强制整个程序退出⽽导致调试也⽆法继续进⾏,就像上图这样,出现问题后,我们知道了出现问题的⾏号,但是我们需要⼿动在该⾏的上⾯设置断点,重新开始调试才能够检查到发⽣问题时各个变量的状态。⽽且,有时问题不是那么容易重现,于是就可能出现没法重现错误再检查状态的问题。
  所以,我们可以⾃⼰写⼀个类似的宏来解决这个问题,我们希望在违反断⾔时触发断点陷阱门中断⽽不是调⽤abort,这样,在违反断⾔时程序会暂停下来,等待程序员来检查当前的状态有何异常。
  下⾯是⼀个Visual C++中的实现。
手机号实名认证#include <iostream>
#include <casrt>
using namespace std;
#define _ASSERT(x) if (!(x)) __asm {int 3};
int main() {
int i = 22;
//asrt(i != 22);
_ASSERT(i != 22);
system("pau");
return0;
白丝初中生}
张信哲  上⾯定义了⼀个宏,名字当然可以⾃⼰取,实际上做的⼀件事就是检查断⾔,然后如果断⾔结果为fal(0),那么就调⽤内联汇编指令int 3陷⼊调试中断。
  在2011年的C++标准中出现了静态断⾔(static_asrt)的语法,所谓静态断⾔,就是在编译时就能够进⾏检查的断⾔,static_asrt是C++的标准语法,不需要引⽤头⽂件。静态断⾔的另⼀个好处是,可以⾃定义违反断⾔时的编译错误信息。
#include <iostream>
using namespace std;
int main() {
const int i = 22;
笔下的另一个世界static_asrt(i != 22, "i equals to 22");
system("pau");
什么的果实
return0;
}
  这个代码,将⽆法通过编译,因为i的值违反了静态断⾔。
土豆焖豆角  静态断⾔的限制是,断⾔本⾝必须是常量表达式,如果这样的i不是常量,静态断⾔是不符合语法的。

本文发布于:2023-05-17 12:10:18,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/667463.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:问题   调试   检查
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图