Lo standard è una sorta di "contratto" tra te e il tuo compilatore che definisce il significato dei tuoi programmi. Come programmatori, spesso abbiamo un certo modello mentale di come funziona la lingua, e questo modello mentale è spesso in contrasto con lo standard. (Ad esempio, i programmatori C spesso considerano un puntatore come "un intero che denota un indirizzo di memoria", e quindi presumono che sia sicuro eseguire qualsiasi aritmetica / conversioni / manipolazioni sui puntatori che si potrebbero eseguire con un intero che denota una memoria indirizzo. Questa ipotesi non concorda con lo standard, ma impone restrizioni molto severe su ciò che puoi fare con i puntatori.)
Quindi, qual è il vantaggio di seguire lo standard, piuttosto che il tuo modello mentale?
In parole semplici, è che lo standard è corretto, e il tuo modello mentale è sbagliato. Il tuo modello mentale è in genere una visualizzazione semplificata di come funzionano le cose sul tuo sistema, in casi comuni, con tutte le ottimizzazioni del compilatore disabilitate; i produttori di compilatori generalmente non si sforzano di conformarsi ad esso, specialmente quando si tratta di ottimizzazioni. (Se non trattieni la tua fine del contratto, non puoi aspettarti alcun comportamento specifico dal compilatore: garbage in, garbage out.)
People seem to not like non-portable solutions, even if they work for me.
Potrebbe essere meglio dire "anche se loro sembrano lavorare per me". A meno che il compilatore non specifichi specificamente che un certo comportamento funzionerà (vale a dire: a meno che non si stia utilizzando uno standard arricchito, costituito dalla documentazione standard più appropriata del compilatore), non si sa che funzioni davvero, o che sia davvero affidabile. Ad esempio, l'overflow di interi con segno tipicamente si traduce in un wrapping su molti sistemi (quindi, INT_MAX+1
è in genere INT_MIN
) - eccetto che i compilatori "sanno" che l'aritmetica di interi con segno mai supera un programma C (corretto), e spesso esegue molto sorprendenti ottimizzazioni basate su questa "conoscenza".