确定预处理器中的优化级别?

-Og是一个相对较新的优化选项,旨在改进应用优化时的调试体验。 如果用户选择-Og ,那么我希望我的源文件激活备用代码路径以增强调试体验。 GCC提供__OPTIMIZE__预处理器宏 ,但只有在优化生效时才将其设置为1。

有没有办法学习优化级别,如-Og-O3-Og ,以便与预处理器一起使用?

我认为不可能直接知道用于编译软件的优化级别,因为这不在已定义的预处理器符号列表中

您可以依赖-DNDEBUG (无调试),它用于在发布代码中禁用断言,并在此情况下启用“调试”代码路径。

但是,我认为更好的做法是在项目中使用系统范围的符号集,并让用户选择明确使用的内容:

  • MYPROJECT_DNDEBUG
  • MYPROJECT_OPTIMIZE
  • MYPROJECT_OPTIMIZE_AGGRESSIVELY

这使得调试或发布/调试之间的行为差​​异变得更加容易,因为您可以逐步打开/关闭不同的行为。