[C++]NDEBUG宏与assert行为

来源:互联网 发布:ftp默认使用的端口 编辑:程序博客网 时间:2024/05/20 10:51
 
  1. NDEBUG宏是Standard C中定义的宏,专门用来控制assert()的行为。如果定义了这个宏,则assert不会起作用。
    #ifdef NDEBUG
    #define assert(x) ((void)0)
    #else
    ...
  2. C Standard中规定了assert以宏来实现。<assert.h>被设计来可以被多次包含,其中一上来就undef assert,然后由NDEBUG宏来决定其行为。如:
    #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行为。

  3. NDEBUG宏由于字面意思,也被用于作为判断debug/release版本的宏,不过这个是编译器、环境相关的,并不可靠。比如vc中,对生成的release版本项目,默认会定义这个宏,而gcc并没有定义,得用-DNDEBUG参数来定义。 

  4. C++ Standard中完全采用了C中的定义。
原创粉丝点击