Prevent C++11 removal of endless loops

萝らか妹 提交于 2019-12-01 17:02:12

One of the requirements for a loop to be removed (as mentioned in that question) is that it

  • does not access or modify volatile objects

So,

void wait_forever(void)
{
    volatile int i = 1;
    while (i) ;
}

should do the trick, although I would certainly verify this by looking at the disassembly of a program produced with your particular toolchain.

A function like this would be a good candidate for GCC's noreturn attribute as well.

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();
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!