寻找可以操纵编译器优化功能的宏

时间:2012-12-27 15:37:41

标签: c compiler-optimization

有没有办法将代码块或函数标记为编译器优化功能的排除部分?

我有一个只在启用优化功能时才会出现的错误。我对它的位置有一些猜测,这个宏可以提供很好的帮助。

2 个答案:

答案 0 :(得分:4)

如果我看到代码中包含#pragma GCC optimize "O0",我会非常担心。我 肯定 要求任何与我一起工作的人都要明确说明为什么这是必要的,并且可能会报告编译器错误,这就是为什么它不能正常工作优化编译器供应商。

如果你甚至 想到 关于向内核邮件列表或类似内容提交内容,我会确保穿着三层或四​​层石棉,因为火焰即将到来你的方式将是激烈的。

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

答案 1 :(得分:2)

在gcc中,您可以在函数级别使用optimize pragma来避免优化。

#pragma GCC optimize "O0" 可以应用于函数以防止对该函数进行优化。但我不确定是否有办法阻止阻止代码进行优化。

因此,您可以对整个程序进行整体优化设置,这将使用optimize对函数的给定优化覆盖该设置。