Бесконечный цикл с пустым телом имеет поведение undefined в С++ 11. Я не знаю, также ли это делает на C, поэтому позвольте сказать, что я пишу встроенную прошивку на С++ 11 (знаю, маловероятно, но несу с собой).
Если мой main
был просто a:
while (true) {}
а остальные функции устройства были обработаны прерываниями, какие подходы я могу предпринять, чтобы выяснить, делает ли моя реализация этот цикл безопасным и значимым? Помня, что в соответствии со стандартом реализация может свободно делать все, что захочет, в этом случае, включая полное удаление цикла.
Предположим, что это не ясно указано в документации по реализации, поскольку я этого никогда не видел.
Или это потерянная причина, и я должен взломать обходное решение?
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);
}
Я признаю, что встроенные разработчики исторически не слишком много думают об этом, вместо этого берут на себя более "приблизительный" подход "здравого смысла" от своего компилятора. Но я предпочитаю строго придерживаться стандартов, чтобы избежать сюрпризов как можно больше.