-Og
是一个相对较新的优化选项,其目的是在应用优化的同时改善调试体验。如果用户选择-Og
,那么我希望源文件激活备用代码路径,以增强调试体验。GCC提供了预处理宏,但它只在优化生效时设置为1。
是否有方法学习优化级别,如-O1
、-O3
或-Og
,以便与预处理器一起使用?
发布于 2015-07-30 08:30:55
我认为这不可能直接知道用于编译软件的优化级别,因为这在定义的预处理器符号列表。中是不可能的
您可以依赖-DNDEBUG
(无调试),它用于禁用发布代码中的断言,并在本例中启用“调试”代码路径。
但是,我认为一个更好的方法是让一个系统范围的符号集定位到您的项目中,并让用户明确地选择使用什么。
MYPROJECT_DNDEBUG
MYPROJECT_OPTIMIZE
MYPROJECT_OPTIMIZE_AGGRESSIVELY
这使得调试或发布/调试之间的行为差异变得更加容易,因为您可以增量地打开/关闭不同的行为。
发布于 2019-03-18 20:32:32
我不知道这是不是聪明的黑客,但这是一个黑客。
$ 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
clang并没有造出防御工事。
发布于 2021-03-24 20:47:03
某些特定于系统的预处理宏存在,这取决于您的目标.例如,特定于微芯片的gcc的XC16变体(目前基于gcc 4.5.1)具有预处理宏__OPTIMIZATION_LEVEL__
,其值为0、1、2、s或3。
注意,重写特定例程的优化(例如使用__attribute__((optimize(0)))
)不会改变该例程中__OPTIMIZE__
或__OPTIMIZATION_LEVEL__
的值。
https://stackoverflow.com/questions/31718637
复制相似问题