标签:gcc 定义 记录 NDEBUG assert DEBUG 参数 release include
本文记录一些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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。