gcc参数记录
Posted tiny1987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ",x); 11 return 0; 12 }
trace(),assert()都只是在DEBUG模式下才起作用的,如果定义了NDEBUG,编译器会以为是非DEBUG的模式(虽然编译出来的程序还是很大),而且还可以进行调试,此时trace(),assert()就没有用了。就如同你编译成release版的时候这些没有用一样。
#define DEBUG 会重新打开调试开关
NDEBUG宏由于字面意思,也被用于作为判断debug/release版本的宏,不过这个是编译器、环境相关的,并不可靠。比如vc中,对生成的release版本项目,默认定义这个宏,而gcc并没有定义,得用-DNDEBUG参数来定义。
以上是关于gcc参数记录的主要内容,如果未能解决你的问题,请参考以下文章