Cpp / #error、static_assert、assert 区别
一、#error
执行期间是预编译阶段,目的是配合 #ifdef / #ifndef 参与预编译的条件检查,显示一段错误信息。
二、static_assert
static_assert(bool flag, char *msg);
- 编译期断言,程序在编译的过程中执行。
- 若 flag 为真,什么也不做。
- 若 flag 为假,产生一条编译错误,输出错误信息 msg,错误位置为当前行号。
static_assert 可以放在代码中任何位置,可以增加编译期对程序的控制,准确定位出错的可能。
三、assert
assert(bool flag);
- assert 是从 C 语言中继承过来的的断言方式,运行期下的断言。
- 若 flag 为真,什么也不做。
- 若 flag 为假,终止程序。
注意 assert 默认无论在 Debug 还是 Release 下均是有效的,如果想要只在 Debug 下生效,需要在
#include <cassert>
之前增加宏
#define NDEBUG
static_assert(1 == 2, "1 not equal 2.");#include <iostream>#define NDEBUG
#include <cassert>#ifdef NDEBUG
#error "define NDDEBUG"
#endifint main()
{int i = 0;assert(i == 2);return 0;
}
编译结果:
test.cc:11:2: error: #error "define NDDEBUG"#error "define NDDEBUG"^~~~~
test.cc:1:1: error: static assertion failed: 1 not equal 2.static_assert(1 == 2, "1 not equal 2.");^~~~~~~~~~~~~
因为 #error 发生在预编译阶段,static_assert 发生在编译阶段,所以 #error 信息先显示,static_assert 后显示。
(SAW:Game Over!)
Cpp / #error、static_assert、assert 区别相关推荐
- C++中#error/assert/static_assert的区别及使用
C++ 语言支持可帮助您调试应用程序的三个错误处理机制:#error 指令.static_assert 关键字和 assert (CRT) 宏.所有的三种机制都会发出错误消息. #error可看做预编 ...
- fixture详细介绍-作为参数传入,error和failed区别
前言 fixture是pytest的核心功能,也是亮点功能,熟练掌握fixture的使用方法,pytest用起来才会得心应手! fixture简介 fixture的目的是提供一个固定基线,在该基线上测 ...
- Debug Pytorch: RuntimeError: CUDA error: device-side assert triggered
报错信息 RuntimeError: CUDA error: device-side assert triggered /pytorch/aten/src/THC/THCTensorScatterGa ...
- error C2065: 'assert' : undeclared identifier
F:\VC6.0 : error C2065: 'assert' : undeclared identifier 导入#include <assert.h> 转载于:https://www ...
- 机器学习中的Bias,Error,Variance的区别
机器学习中的Bias,Error,Variance的区别 @(Machine Learning) 名词解释 Error | 误差 Bias | 偏差 – 衡量准确性 Variance | 方差 – 衡 ...
- 已解决RuntimeError: CUDA error: device-side assert triggered异常的正确解决方法,亲测有效!!!
已解决RuntimeError: CUDA error: device-side assert triggered异常的正确解决方法,亲测有效!!! 文章目录 报错问题 解决方法 福利 报错问题 粉丝 ...
- 解决:RuntimeError: CUDA error: device-side assert triggered
@[TOC]解决办法:RuntimeError: CUDA error: device-side assert triggered CUDA kernel errors might be asynch ...
- error: [xxxxxxx/qrc_resource.cpp] Error 1
出现error: [xxxxxxx/qrc_resource.cpp] Error 1这样的情况是删除了部分资源文件,这时候你有几种做法可以试试: 1.将删除的资源文件找回来恢复到原来的目录原来的名字 ...
- 【总结】Throwable/Error/Exception/RuntimeException区别
[总结]Throwable/Error/Exception/RuntimeException区别 1.JAVA是将所有的错误封装为一个对象,其根本父类为Throwable,有两个子类:Error和Ex ...
- 错误处理--CUDA error: device-side assert triggered(很有效)
embeding中词的总数设小了 在函数 nn.Embedding(vocab_size, embedding_dimension) 中 参数vocab_size 为你字典的总词数,如果在训练中有编号 ...
最新文章
- asp.net中退出登陆的相关问题(解决后退或直接粘贴地址进入网页的问题)
- vue一级分类和耳机分类_?1K411023 岩土分类与不良土质处理方法·2020年一级市政建造师...
- [翻译]VC++中创建并使用自定义控件
- 算法的力量(李开复)
- TensorFlow2.0(十二)--实现简单RNN与LSTM网络
- 使用plt *.log
- 分段式多级离心泵_分段式多级离心泵工作原理
- 论文阅读:Spatial context-aware network for salient object detection
- 纸牌游戏程序设计要点(C语言)
- tlwn823n无线网卡驱动 linux,centos 6.5安装 TP-link TL-wn823n驱动
- 世界顶级企业的数据中台实践剖析
- 索尼BDP-S580回顾 - 一个最好的蓝光播放器在2011年
- java 流读取图片供前台显示
- 23230118英语学习
- gis可达性分析步骤_基于三维GIS技术的公路交通数字孪生系统
- 如何解决 使用matplotlib.finance获取雅虎财经网站股票数据 报错?
- 网站登录入口大全|搜索引擎登录入口
- 帝国Cms列表页和内容页调用栏目名称与链接标签的说明(列表与标签模板)
- 【python】Python实现模拟按键切换浏览器标签
- 讨论电子工程师的前途