如本问题所述,C ++ 11优化了无限循环。
但是,在具有单一目的的嵌入式设备中,无穷循环是有意义的,并且实际上经常被使用。while(1);
对于看门狗辅助的复位,即使是完全空的也很有用。终止但空循环在嵌入式开发中也很有用。
是否有一种优雅的方法专门告诉编译器在不完全禁用优化的情况下不要删除空循环或无限循环?
要删除循环的要求之一(如该问题所述)是
- 不访问或修改易失性对象
所以,
void wait_forever(void)
{
volatile int i = 1;
while (i) ;
}
应该可以解决问题,尽管我当然会通过查看使用您的特定工具链生成的程序的反汇编来验证这一点。
像这样的函数也将是GCCnoreturn
属性的理想候选者。
void wait_forever(void) __attribute__ ((noreturn));
void wait_forever(void)
{
volatile int i = 1;
while (i) ;
}
int main(void)
{
if (something_bad_happened)
wait_forever();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句