C&C++   发布时间:2019-10-05  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何“告诉”C编译器不应该优化代码?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有时我需要一些代码由CPU执行,就像我把它放在源代码中一样.但任何C编译器都有它的优化算法,@R_951_9447@期待一些技巧.例如:
unsigned char  flag=0;

interrupt ADC_ISR(){
  ADC_result = ADCH;
  flag = 1;
}

void main(){
  while(!flag);
  echo ADC_result;
}

有些编译器肯定会生成while(!flag);循环不定式因为它会假设flag等于false(因此!flag总是为truE).

有时我可以使用volatile关键字.有时它可以提供帮助.但实际上在我的情况下(AVR GCC)volatile关键字强制编译器将变量定位到SRAM而不是寄存器(由于某些原因这是不好的).此外,互联网上的许多文章建议使用volatile关键字作为结果可能变得不稳定(取决于编译器,其优化设置,平台等).

所以我肯定更喜欢以某种方式指出源代码指令并告诉编译器这个代码应该完全按原样编译.像这样:volatile while(!flag);

有没有标准的C指令来做这个?

解决方法

您确实应该使用volatile作为 answered by David Schwartz.另请参阅GCC文档的 this章节.

如果您使用最近的GCC编译器,则可以使用适当的function specific options pragmas(或某些优化函数attribute)在单个函数中禁用优化,例如

#pragma GCC optimize ("-O0");

你的主要之前.我不确定这是个好主意.

也许你想要extended asm statements with the volatile keyword.

大佬总结

以上是大佬教程为你收集整理的如何“告诉”C编译器不应该优化代码?全部内容,希望文章能够帮你解决如何“告诉”C编译器不应该优化代码?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。