Gli attributi noreturn
sono necessari per le funzioni di non ritorno, oppure è solo un (probabilmente prematuro? - almeno per le uscite, non riesco a immaginare perché ottimizzare lì) l'ottimizzazione?Sono necessari gli attributi di Noreturn sulle funzioni di chiusura?
È stato spiegato che in un contesto come
void myexit(int s) _Noreturn {
exit(s);
}
// ...
if (!p) { myexit(1); }
f(*p);
/// ...
noreturn
impedisce il ramo !p
venga ottimizzato fuori. Ma è davvero possibile per un compilatore ottimizzare questo ramo? Mi rendo conto che la logica per l'ottimizzazione sarebbe: "Il comportamento non definito non può accadere Se p
== NULL
, il dereferenziamento è UB, quindi p
non può mai essere NULL
in questo contesto, quindi il ramo !p
non si attiva". Ma il compilatore non può risolvere il problema altrettanto bene assumendo che myexit
potrebbe essere una funzione che non ritorna (anche se non è esplicitamente contrassegnata come tale)?
Sono riluttante a contrassegnare questo C++ anche a causa di puristi felici, ma C++ ha anche attributi noreturn ('[[noreturn]]'), e una risposta C/C++ sarebbe molto gradita. – PSkocik
_ "noreturn impedisce che il ramo'! P' venga ottimizzato. "_ Perché? – mvidelgauz
Possibile duplicato - http://stackoverflow.com/questions/10538291/quello-è-il-punto-di-noreturn – mvidelgauz