Salve a tutti,
spiego brevemente il problema pratico a cui mi trovo costretto a trovare una soluzione.
Scrivo codice utilizzante i tipi C99/Posix, quelli definiti nell'header stdint.h.
Questi tipi sono exact width, cioè danno la sicurezza certa che un tipo di 8 bit di length non è nè più corto nè più lungo.
Sto cercando di gestire tramite preprocessore del C la situazione in cui questo header non sia presente, in questo caso faccio dei typedef con i tipi normali per rendere comunque compilabile il codice.
Il problema si pone quando voglio valutare se il tipo standard del C in quell'implementazione ha limiti massimi e minimi "accettabili" per contenere i valori.
Lo standard dice che un plain/signed/unsigned char è lungo ALMENO 8 bit, che un signed/unsigned short int è lungo ALMENO 16 bit e che un signed/unsigned long int è lungo almeno 32 bit.
Facendomi forte di questa "sicurezza" pensavo di impostare i limiti manualmente con dei #define, pensando che un char lungo ad esempio 9 bit potesse comunque contenere gli 8 bit necessari al mio codice e che quindi il limite massimo fosse (2 elevato all'8) - 1 e cioè 0xFF.
Mi è però stato detto che la lunghezza di un dato non assicura il limite massimo e minimo, cioè che è possibile avere un compilatore che utilizzi per un tipo char una lunghezza di 32 bit e un limite massimo inferiore a 0xFF.
Esiste un limite massimo e minimo definito dallo standard (un po' come la lunghezza di ALMENO 8, 16 o 32 bit)?
Potreste aiutarmi a porre rimedio a questo problema/dubbio?
Ringraziando tutti per l'attenzione, porgo distinti saluti.

Rispondi quotando
