Un problema particolare di cui potrebbe essere necessario rimanere aggiornati (ad esempio, se i file di dati devono funzionare su più piattaforme) è endianness.
I numeri sono rappresentati in modo diverso a livello binario su diverse architetture. I sistemi big-endian ordinano il byte più significativo prima e i sistemi little-endian ordinano prima il byte meno significativo.
Se si scrivono alcuni dati grezzi in un file in un endianness e poi si legge di nuovo il file su un sistema con un endianness diverso, si avranno ovviamente dei problemi.
Si dovrebbe essere in grado di ottenere l'endianness in fase di compilazione sulla maggior parte dei sistemi da sys/param.h
. Se è necessario rilevarlo in fase di runtime, un metodo consiste nell'utilizzare un'unione di int
e char
, quindi impostare char
su 1 e vedere quale valore ha lo int
.
fonte
2010-02-20 20:19:45
Considera http://stackoverflow.com/questions/1257923/why-is-it-difficult-to-write-portable-c-programs-closed e http://stackoverflow.com/questions/61499/making- codice portatile e, in effetti, gran parte di http://stackoverflow.com/search?q=[c]+portable. – dmckee