[置顶] NDEBUG

头文件assert.h定义的宏受NDEBUG的影响.如果预程序在处理这个头文件时已经定义了NDEBUG,assert宏的内容就定义为空,这意味着assert宏不在起作用.所以,可以在最终发布程序的时候可以使用-DNDEBUG关闭断言功能或者把#define NDEBUG加到每个源文件中,但这条语句必须放在#include <assert.h>之前.

#include<stdio.h>    
#define   NDEBUG//要加在#include<assert.h>前面
#include<assert.h>

int main()
{   
int x = 0;   
assert(x);      
printf("aa\n");
return 0;
}

trace(),assert()都只是在DEBUG的模式下才起作用的,如果定义了NDEBUG,编译器会认为是非DEBUG的模式(虽然编译出来的程序还是很大,而且还可以进行调试),此时trace(),assert()就没有用了.就如同你编译成release版的时候这些没有用一样.

#define DEBUG   会重新打开调试开关

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


你可能感兴趣的:(gcc,编译器)