[C++]NDEBUG宏與assert行為

來源:互聯網
上載者:User
文章目錄
  • 參考

 

  1. NDEBUG宏是Standard C中定義的宏,專門用來控制assert()的行為。如果定義了這個宏,則assert不會起作用。
  2. #ifdef NDEBUG
    #define assert(x) ((void)0)
    #else
    ...

  3. C Standard中規定了assert以宏來實現。<assert.h>被設計來可以被多次包含,其中一上來就undef assert,然後由NDEBUG宏來決定其行為。如:
  4. #ifdef NDEBUG
        #undef NDEBUG
        #include <assert.h>
        #define NDEBUG
    #else
        #include <assert.h>
    #endif // #ifdef NDEBUG

    將以上代碼放在c/cpp最上方(當然,其後不能出現其它#include <assert.h>語句),就可以保證c/cpp所在的編譯單元中的assert,在release下也會觸發abort行為。

  5. NDEBUG宏由於字面意思,也被用於作為判斷debug/release版本的宏,不過這個是編譯器、環境相關的,並不可靠。
  6. 比如vc中,對產生的release版本項目,預設會定義這個宏,而gcc並沒有定義,得用-DNDEBUG參數來定義。 

  7. C++ Standard中完全採用了C中的定義。
參考
  • C - Approved standards
    http://www.open-std.org/jtc1/sc22/wg14/www/standards.html#9899
  • C++ Standard(ISO/IEC 14882)

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.