Modificato per includere il riferimento standard corretto grazie a Carl Norum.Overflow intero in C: standard e compilatori
stati standardIl C
Se un condizioni eccezionali si verifica durante la valutazione di un'espressione (cioè, se il risultato non è matematicamente definito o meno nell'intervallo di valori rappresentabili per il suo tipo), il comportamento non è definito.
Esistono switch del compilatore che garantiscono determinati comportamenti sull'intero overflow? Mi piacerebbe evitare i demoni nasali. In particolare, mi piacerebbe imporre al compilatore di avvolgere in overflow.
Per motivi di unicità, prendiamo lo standard per essere C99 e il compilatore per essere gcc. Ma sarei interessato alle risposte per altri compilatori (icc, cl) e altri standard (C1x, C89). Infatti, solo per infastidire il pubblico di C/C++, apprezzerei anche le risposte per C++ 0x, C++ 03 e C++ 98.
Nota: lo standard internazionale ISO/IEC 10967-1 può essere rilevante qui, ma per quanto posso dire è stato menzionato solo nell'allegato informativo.
Eccellente, proprio quello che volevo vedere. C'è qualcosa di simile per i tipi non firmati? – Charles
@Charles non ne hai bisogno per i tipi senza segno - il comportamento di overflow è già ben definito per loro (vedi la mia risposta). –
@Carl Norum: vedo che è definito in C++ e che è definito in C per i turni (6.5.7 para 5). Non riesco a vedere dove è definito nello standard C per l'addizione e la moltiplicazione. – Charles