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 }
View Code

 

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

 

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

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

以上是关于gcc参数记录的主要内容,如果未能解决你的问题,请参考以下文章

GCC优化技巧,真的有用吗?

提效小技巧——记录那些不常用的代码片段

gcc 的基本使用

CSP核心代码片段记录

GCC:编译成程序集并明确与代码的对应关系?

gcc延时绑定参数