首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定预处理器的优化级别?

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

Stack Overflow用户
提问于 2015-07-30 08:22:31
回答 3查看 5.2K关注 0票数 28

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-30 08:30:55

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

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

但是,我认为一个更好的方法是让一个系统范围的符号集定位到您的项目中,并让用户明确地选择使用什么。

  • MYPROJECT_DNDEBUG
  • MYPROJECT_OPTIMIZE
  • MYPROJECT_OPTIMIZE_AGGRESSIVELY

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

票数 10
EN

Stack Overflow用户

发布于 2019-03-18 20:32:32

我不知道这是不是聪明的黑客,但这是一个黑客。

代码语言:javascript
运行
复制
$ 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并没有造出防御工事。

票数 23
EN

Stack Overflow用户

发布于 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__的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31718637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档