jww*_*jww 20 c gcc gdb compiler-optimization c-preprocessor
-Og是一个相对较新的优化选项,旨在改善应用优化时的调试体验.如果用户选择-Og,那么我希望我的源文件激活备用代码路径以增强调试体验.GCC提供__OPTIMIZE__预处理器宏,但只有在优化生效时才设置为1.
有没有办法学习优化级别,比如-O1,-O3或者-Og与预处理器一起使用?
mev*_*ets 15
我不知道这是否是聪明的黑客,但这是黑客。
$ gcc -Xpreprocessor -dM -E - < /dev/null > 1
$ gcc -Xpreprocessor -dM -O -E - < /dev/null > 2
$ diff 1 2
53a54
> #define __OPTIMIZE__ 1
68a70
> #define _FORTIFY_SOURCE 2
154d155
< #define __NO_INLINE__ 1
Run Code Online (Sandbox Code Playgroud)
lang没有产生FORTIFY。
我认为这不可能直接知道用于编译软件的优化级别,因为这不在已定义的预处理程序符号列表中
您可以依靠-DNDEBUG(没有调试)来禁用发布代码中的断言,并在这种情况下启用“调试”代码路径。
但是,我认为最好的做法是在项目本地具有一组系统范围的符号,并让用户选择要明确使用的符号。
MYPROJECT_DNDEBUGMYPROJECT_OPTIMIZEMYPROJECT_OPTIMIZE_AGGRESSIVELY这使调试或发布/调试之间的行为差异变得更加容易,因为您可以逐步打开/关闭不同的行为。