其他分享
首页 > 其他分享> > gcc参数记录(一)

gcc参数记录(一)

作者:互联网

本文记录一些gcc相关参数,便于个人记忆,持续更新。

NDEBUG 

头文件assert.h定义的宏受NDEBUG的影响。如果预程序在处理这个头文件时已经定义了NDEBUG,assert宏的内容就定义为空,这意味着assert宏不起作用。

所以,可以在最终发布程序的时候可以用-DNDEBUG关闭断言功能或者把#define NDEBUG加每个源文件中,但这条语句必须放在#include <assert.h>之前。

 1 #include <stdio.h>
 2 
 3 #definne NDEBUG
 4 #include <assert.h>
 5 
 6 int main()
 7 {
 8   int x = 0;
 9   assert(x);
10   printf("%d\n",x);
11   return 0;
12 }
View Code

 

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

 

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

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

标签:gcc,定义,记录,NDEBUG,assert,DEBUG,参数,release,include
来源: https://www.cnblogs.com/tiny1987/p/12964572.html