防止c++ 11移除无限循环
Prevent C++11 removal of endless loops
正如本问题所讨论的,c++ 11优化了无限循环。
然而,在具有单一目的的嵌入式设备中,无限循环是有意义的,并且实际上经常使用。即使是完全空的while(1);
对于看门狗辅助复位也是有用的。终止但是空循环在嵌入式开发中也很有用。
是否有一种优雅的方式来明确地告诉编译器不要删除空循环或无限循环,而不会完全禁用优化?
要删除循环的一个要求(正如在那个问题中提到的)是它
- 不能访问或修改易失性对象
void wait_forever(void)
{
volatile int i = 1;
while (i) ;
}
应该完成这个任务,尽管我肯定会通过查看使用您的特定工具链生成的程序的反汇编来验证这一点。
这样的函数也是GCC的noreturn
属性的一个很好的候选。
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();
}
相关文章:
- 过载'operator new'如何导致无限循环?
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 遍历链表时的无限循环
- 循环链表:无限循环
- 比较两个字符串后卡在无限循环中
- 在做一段时间内检查字符的无限循环
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 可能的无限循环
- 超出 int 的值范围后的无限循环
- 为什么这段代码会导致无限循环?
- 运行无限循环的最小二叉树问题
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 连接线程时的无限循环
- 为什么这种方法会进入无限循环?
- 由于QTextStream的无限循环
- Qt 在另一个线程中无限循环
- 从文件 C++ 读取时的无限循环
- 试图找出为什么我的代码保持无限循环