一、#error

执行期间是预编译阶段,目的是配合 #ifdef / #ifndef 参与预编译的条件检查,显示一段错误信息。

二、static_assert

static_assert(bool flag, char *msg);
  1. 编译期断言,程序在编译的过程中执行。
  2. 若 flag 为真,什么也不做。
  3. 若 flag 为假,产生一条编译错误,输出错误信息 msg,错误位置为当前行号。

static_assert 可以放在代码中任何位置,可以增加编译期对程序的控制,准确定位出错的可能。

三、assert

assert(bool flag);
  1. assert 是从 C 语言中继承过来的的断言方式,运行期下的断言。
  2. 若 flag 为真,什么也不做。
  3. 若 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 区别相关推荐

  1. C++中#error/assert/static_assert的区别及使用

    C++ 语言支持可帮助您调试应用程序的三个错误处理机制:#error 指令.static_assert 关键字和 assert (CRT) 宏.所有的三种机制都会发出错误消息. #error可看做预编 ...

  2. fixture详细介绍-作为参数传入,error和failed区别

    前言 fixture是pytest的核心功能,也是亮点功能,熟练掌握fixture的使用方法,pytest用起来才会得心应手! fixture简介 fixture的目的是提供一个固定基线,在该基线上测 ...

  3. Debug Pytorch: RuntimeError: CUDA error: device-side assert triggered

    报错信息 RuntimeError: CUDA error: device-side assert triggered /pytorch/aten/src/THC/THCTensorScatterGa ...

  4. error C2065: 'assert' : undeclared identifier

    F:\VC6.0 : error C2065: 'assert' : undeclared identifier 导入#include <assert.h> 转载于:https://www ...

  5. 机器学习中的Bias,Error,Variance的区别

    机器学习中的Bias,Error,Variance的区别 @(Machine Learning) 名词解释 Error | 误差 Bias | 偏差 – 衡量准确性 Variance | 方差 – 衡 ...

  6. 已解决RuntimeError: CUDA error: device-side assert triggered异常的正确解决方法,亲测有效!!!

    已解决RuntimeError: CUDA error: device-side assert triggered异常的正确解决方法,亲测有效!!! 文章目录 报错问题 解决方法 福利 报错问题 粉丝 ...

  7. 解决:RuntimeError: CUDA error: device-side assert triggered

    @[TOC]解决办法:RuntimeError: CUDA error: device-side assert triggered CUDA kernel errors might be asynch ...

  8. error: [xxxxxxx/qrc_resource.cpp] Error 1

    出现error: [xxxxxxx/qrc_resource.cpp] Error 1这样的情况是删除了部分资源文件,这时候你有几种做法可以试试: 1.将删除的资源文件找回来恢复到原来的目录原来的名字 ...

  9. 【总结】Throwable/Error/Exception/RuntimeException区别

    [总结]Throwable/Error/Exception/RuntimeException区别 1.JAVA是将所有的错误封装为一个对象,其根本父类为Throwable,有两个子类:Error和Ex ...

  10. 错误处理--CUDA error: device-side assert triggered(很有效)

    embeding中词的总数设小了 在函数 nn.Embedding(vocab_size, embedding_dimension) 中 参数vocab_size 为你字典的总词数,如果在训练中有编号 ...

最新文章

  1. asp.net中退出登陆的相关问题(解决后退或直接粘贴地址进入网页的问题)
  2. vue一级分类和耳机分类_?1K411023 岩土分类与不良土质处理方法·2020年一级市政建造师...
  3. [翻译]VC++中创建并使用自定义控件
  4. 算法的力量(李开复)
  5. TensorFlow2.0(十二)--实现简单RNN与LSTM网络
  6. 使用plt *.log
  7. 分段式多级离心泵_分段式多级离心泵工作原理
  8. 论文阅读:Spatial context-aware network for salient object detection
  9. 纸牌游戏程序设计要点(C语言)
  10. tlwn823n无线网卡驱动 linux,centos 6.5安装 TP-link TL-wn823n驱动
  11. 世界顶级企业的数据中台实践剖析
  12. 索尼BDP-S580回顾 - 一个最好的蓝光播放器在2011年
  13. java 流读取图片供前台显示
  14. 23230118英语学习
  15. gis可达性分析步骤_基于三维GIS技术的公路交通数字孪生系统
  16. 如何解决 使用matplotlib.finance获取雅虎财经网站股票数据 报错?
  17. 网站登录入口大全|搜索引擎登录入口
  18. 帝国Cms列表页和内容页调用栏目名称与链接标签的说明(列表与标签模板)
  19. 【python】Python实现模拟按键切换浏览器标签
  20. 讨论电子工程师的前途

热门文章

  1. android-Activity
  2. Android 中文 API —— TextSwitcher
  3. 关于.cpp文件包含另一个.cpp文件出错的原因以及解决办法
  4. 17、有名管道与无名管道之间的区别
  5. 一篇文章教你如何使用python爬虫
  6. java 反射 Constructor、Method、Field 基本用法
  7. Linux根目录扩容操作命令整理(扩容99G;未添加新盘)
  8. linux awk列数据处理工具使用示例
  9. Linux df -h查看磁盘使用情况
  10. Python Django 请求重定向的三种方式