2012-12-27 39 views
1

有没有办法将代码块或函数标记为编译器优化特性的排除部分?寻找可以操纵编译器优化特性的宏

我有一个错误,只有当优化功能打开时才会发生。我猜想它可能在哪里,而这个宏可以是一个很好的帮助。

+0

肯定的:'#如果0 ...#endif' – 2012-12-27 15:39:28

+0

这使我的心是第一个想法“使用extern关键字”,并在下一步管理的这个“特殊”功能的联动。 – user1824407

+0

[可能有用](http://cache.freescale.com/files/dsp/doc/app_note/AN3674.pdf) –

回答

2

在海湾合作委员会,你可以使用optimize编译在函数级别以避免优化。

#pragma GCC optimize "O0"可应用于防止该功能优化的功能。但我不确定是否有办法阻止代码被优化的

所以,你可以有一个整体的优化设置对整个程序,这将覆盖与使用optimize函数的定优化该设置。

4

,如果我看到有它#pragma GCC optimize "O0"代码,我会很担心。我倒是绝对需要有人和我一起工作做出非常明确的意见,为什么是必要的,而且很可能报告编译器缺陷,这就是为什么它没有与优化编译器供应商合作的原因。

而且如果你连认为关于提交的东西内核邮件列表或一些这样的,我保证穿着特里普尔或石棉的四倍层,因为未来的路火焰将是激烈的。

做的正确的事情是找出一个解决方法,为什么你的代码是不是与优化编译正确。如果你需要这样的话,你的代码可能有问题 - 通常它依赖于“你怎么认为编译器做了什么”,这在优化代码时不会发生。这是糟糕的编码,绝对不应该通过禁用编译器优化来解决。

+0

也许它是用于调试本地功能......但我完全同意您的意见 – benjarobin

+0

调试或不,代码在编译时应该工作。在过去的17年中,我不认为我曾经在各个优化级别上都有代码“不工作”[至少没有我在专业上工作过的代码]。但是,当然,我已经看到了奇怪的编译器错误,需要调整编译器标志或调整代码以“避免”。 –

+0

我只是说,更容易调试(使用gdb)一个没有优化的功能(一步一步......) – benjarobin