Cpp / #error、static_assert、assert 区别

一、#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 

之前增加宏

#define NDEBUG

 

 

static_assert(1 == 2, "1 not equal 2.");#include #define NDEBUG
#include #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!)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部