Cpp / #error、static_assert、assert 区别
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Cpp / #error、static_assert、assert 区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                一、#error
執行期間是預編譯階段,目的是配合 #ifdef / #ifndef 參與預編譯的條件檢查,顯示一段錯誤信息。
二、static_assert
static_assert(bool flag, char *msg);static_assert 可以放在代碼中任何位置,可以增加編譯期對程序的控制,準確定位出錯的可能。
三、assert
assert(bool 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 区别的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: CPU 的 ring0、ring1、ri
- 下一篇: UML 类图几种关系的总结
