Come discusso in this question, C++ 11 ottimizza i loop infiniti.Previene la rimozione di loop infiniti da C++ 11
Tuttavia, nei dispositivi incorporati che hanno un unico scopo, i loop infiniti hanno senso e sono in realtà abbastanza spesso utilizzati. Anche un completamente vuoto while(1);
è utile per un reset assistito da watchdog. La terminazione ma i cicli vuoti possono anche essere utili nello sviluppo integrato.
C'è un modo elegante per dire in modo specifico al compilatore di non rimuovere loop vuoti o infiniti, senza disabilitare del tutto l'ottimizzazione?
Does 'wait_forever()' deve ancora leggere il volatile 'i' se ha l'attributo' noreturn'? Se sì, allora quale problema risolve questo attributo? – Ruslan
Come menzionato nella documentazione GCC collegata, 'noreturn' dice al compilatore che l'esecuzione non può mai continuare dopo aver chiamato una funzione' noreturn'. Pertanto, non è necessario emettere * qualsiasi * codice dopo una chiamata a tale funzione. –