是否可以关闭特定功能的优化?我的一个朋友有一个问题,gcc优化使一些(我不知道)μ控制器代码不起作用.我们知道它是哪些函数,但是我们对代码本身没有任何线索,所以最简单和最安全的方法可能就是为整个函数关闭它.
遗憾的是http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html显示有一个优化函数属性/ pragma,但它需要gcc 4.4,这是我们没有的.
提前致谢
您可以将该函数放在一个单独的文件中并在没有优化的情况下编译该文件,但更好的解决方案是找出代码的错误并修复它.
使用gcc启用优化时出现的最常见错误之一是严格别名.确保所有警告都已启用,并查看是否有任何警告可能有助于您找出问题所在.如果您无法弄清楚,请尝试将问题减少到一个小而完整的程序并在此处发布.
小智 5
到目前为止,答案忽略了原始问题中的关键词,即"微控制器代码".编写此类代码以禁用优化时非常常见 - 积极优化器将"优化"整个语句,其副作用是驱动控制器.这是与应用程序编码不同的世界.对于在通常的编程空间中的应用程序,我来到这里寻找相同的信息,以避免将Kahan求和(见维基百科)的例程优化为虚无.因此,我们不要假设生成不同程序行为的优化级别的更改自动成为错误代码的标志.可以通过巧妙地使用volatile关键字来克服某些事情,在某些情况下,应该生成实际的汇编语言并检查它.(我相信这仍然可以通过-S切换到gcc来完成).让我们记住,C是一种便携式汇编程序,而不是一种COBOL.
戴夫