編譯時斷言

2021-06-21 17:07:08 字數 576 閱讀 1844

執行時斷言大家都用過,但如果想當某個條件不滿足時在編譯時就讓程式編譯不通過,即編譯時斷言(不能產生***)是什麼樣子的呢。可參考如下:

1, 參考linux核心靜態斷言

/* force a compilation error if condition is true */

#ifdef win32

#define build_bug_on(e)  

#else

#define build_bug_on(e) ((void)sizeof(char[1 - 2*!!(e)]))

#endif

2, boost庫也提供了靜態斷言,c++**可直接使用

#include <

boost/static_assert.hpp>

boost_static_assert(sizeof(diskchunkinfo_t) == 4400);

C11編譯時斷言static assert

c 11標準新引入的static assert功能可以實現靜態斷言,是乙個非常強大的模板元程式設計工具,配合sfinae特性可以在編譯期發現不符合預期的不合理特化,並且給出自定義的錯誤資訊。1.static assert是 c11 中引入的關鍵字。static assert是 c11 中引入的巨集,...

執行期斷言和編譯期斷言

編譯時斷言和執行時斷言 通常為了檢測一些條件,我們往往在程式裡面加斷言。一般只在debug版有效,release版斷言不生成任何 c 可以使用兩種斷言 靜態斷言和動態斷言,即就是執行期斷言和編譯期斷言!顧名思義,執行期斷言是在程式執行過程中判斷指定的條件,若條件滿足,萬事ok,若斷言失敗,則程式給出...

Go 語言編譯期斷言

這篇文章是關於乙個鮮為人知的讓 go 在編譯期斷言的方法。你可能不會使用它,但是了解一下也很有趣。作為乙個熱身,來看乙個在 go 中熟知的編譯期斷言 介面滿意度檢查。在這段 playground 中,var 行確保型別w是乙個stringwriter,其由io.writestring檢查。packa...