具有空体的无限循环在C++ 11中具有未定义的行为.我不知道它是否也用C语言,所以让我说我在C++ 11中编写嵌入式固件(我知道,不太可能,但请耐心等待).
如果我main只是一个:
while (true) {}
Run Code Online (Sandbox Code Playgroud)
并且设备的其余功能由中断处理,我可以采取哪些方法来发现我的实现是否使这个循环安全且有意义?请记住,根据标准,在这种情况下,实现可以随意执行任何操作,包括完全删除循环.
假设在实现的文档中没有明确说明,因为我从未见过它.
或者这是一个失败的原因,我应该破解一个解决方法?
volatile unsigned int dummy = 0;
while (true) {
// Make the loop well-defined...
dummy++;
// ...with a trivial operation that'll hardly ever even happen
sleep(42*86400);
}
Run Code Online (Sandbox Code Playgroud)
我认识到嵌入式开发人员在历史上并没有过多地考虑这种事情,而是从他们的编译器中采用更"脚踏实地","常识"的方法.但我更倾向于严格按照标准编码,以尽可能避免意外.