> Io per indici ormai uso quasi esclusivamente size_t.
> La "int" la considero almeno 32 bit. Il che non e' necessariamente vero,
> ma all'atto pratico non penso di dover mettere mano su una architettura <
> 32 bit per il futuro 8)
Il problema viene quando carichi da file un int presupposto a 32 bit, tipo:
int width;
fread(&width, 4, 1, file);
Se int è a 64 bit si rischia di avere un valore errato di width perchè si
scriverebbe nei suoi primi 4 bytes. In effetti si potrebbe shiftare width in
base alla sua dimensione però non è tanto efficente, è preferibile avere dei
tipi a dimensione fissa soprattutto quando si salva e si carica da file.
Un discorso a parte meriterebbe l'Endianness, la funzione fread assieme ad
altre sono endianness dependant anche se fanno parte dello standard! Per cui
chi pensa di usare SDL e fare del codice crossplatform limitandosi allo
standard ANSI, deve stare molto attento a queste insidie. Per lavorare con
formati proprietari sarebbe opportuno prendere un endianness di riferimento
(es: little endian) e fare un overload delle funzioni di sistema. Ad
esempio:
double friction;
fread_little(&friction, 8, 1, file);
Si occuperebbe di caricare il parametro friction correttamente su sistemi
little endian o big endian avendo un little endian come punto di
riferimento. L'endianess di riferimento può essere salvata all'interno del
formato proprietario. C'è da dire inoltre che il byte order di riferimento
per il network è il big-endian, per cui bisogna fare attenzione anche a
questo.