Newsgroup: it.comp.os.linux.development
Titolo: Perchè non esiste il tipo byte (in C)?

Salve a tutti,
la domanda sul subject forse può sembrare sciocca, ma perchè non esiste 
un tipo standard per un intero ad 8 bit?
E' sufficiente usare il tipo char per garantire che su qualunque 
architettura giri il mio software la variabile
char var;
sia sempre un intero ad 8 bit?
Saluti, Alberto

 sia sempre un intero ad 8 bit?
Sě.
Ciao
  Andrea

 sia sempre un intero ad 8 bit?
No, non e' sufficiente, il numero di bit in un char dipende
dall'implementazione. Certi DSP attuali (per non scomodare CPU di
trent'anni fa) hanno char non di 8 bit. Per saperlo con esattezza puoi
fare affidamento alla macro CHAR_BIT in <limits.h> (ISO C).
-- 
Legrandin

sia sempre un intero ad 8 bit?
Lo standard garantisce che sizeof(char)=1 su *qualunque* piattaforma,
mentre nessuno garantisce che il char sia senza segno e che quel 1
(uno) implichi sempre 8 bit, ovvero che un byte sia sempre di 8 bit.
Lo standard impone che sia *almeno* 8 bit.  Generalmente, il tipo byte
si definisce come:
typedef unsigned char byte;
p.s.: perché non it.comp.lang.c ? ;-)

Sì.
No (purtroppo).


Infatti, mi confondevo con quello che hai scritto nell'altra risposta :)
Ciao
  Andrea

 Sì.
No, è lungo CHAR_BIT bits. L'identità è sizeof(char) == 1, ovvero un
char equivale ad un byte (per definizione).
Restando su architetture "normali" (x86, IA64, sparc, alpha, mips, arm,
...) è vero che un byte equivale ad 8 bit.
Luca
-- 
"La Via prosegue senza fine."
	Bilbo Baggins - Il Signore degli Anelli - J.R.R. Tolkien

 p.s.: perché non it.comp.lang.c ? ;-)
Bhò...perchè mi interessa la portabilità della soluzione solo sotto 
linux visto che l'applicazione si basa su questo os, però per tutte le 
architetture sulle quali linux giri.
Saluti, Alberto

 bit su ogni architettura sulla quale linux possa girare 
Per cura curiosita': perche'?
-- 
Salvatore Iovene
http://www.iovene.com

bit
Non puoi, a meno di non definirti i tipi specifici:
#ifdef PIATTAFORMA_X
typedef /* ...tipo 8 bit della piattaforma X... */ mioTipo8bit;
#endif
#ifdef PIATTAFORMA_Y
typedef /* ...tipo 8 bit della piattaforma Y... */ mioTipo8bit;
#endif
#ifdef PIATTAFORMA_Z
typedef /* ...tipo 8 bit della piattaforma Z... */ mioTipo8bit;
#endif
...

 unsigned mi interessa meno, come potrei fare?
usa GLib, che fornisce (tra le altre cose) un tipo "guint8" garantito
per essere un intero senza segno di 8 bit su tutte le architetture
supportate.
altrimenti, fai a manina quello che fanno loro, e vai di typedef
dipendenti dall'architettura.
ciao,
 Emmanuele.

supportate.
Sarei curioso di sapere come fa, visto che questa cosa non è
possibile.

 dipendenti dall'architettura.
Saluti,
David
-- 
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<

 Lo ha detto...
Posso aggiungere che ISO/IEC 9899:1999 (aka C99) aggiunge qualcosa di
piu'.  In 7.18.1.1 dice:
"The typedef name intN_t designates a signed integer type with width
N, no padding bits, and a two's complement representation. Thus,
int8_t denotes a signed integer type with a width of exactly 8
bits. ... These types are optional. However, if an implementation
provides integer types with widths of 8, 16, 32, or 64 bits, it shall
define the corresponding typedef names.".
In 
7.18.1.2
:
"The typedef name int_leastN_t designates a signed integer type with a
width of at least N, such that no signed integer type with lesser size
has at least the specified width.  Thus, int_least32_t denotes a
signed integer type with a width of at least 32 bits. ... The
following types are required: int_least8_t ... .".
L'header e' <stdint.h> .
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg

 Lo ha detto...
Quello era l'*altrimenti*.  Io mi riferivo alla prima parte del messaggio.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 define the corresponding typedef names.".
AFAIK, "shall" non ha valore obbligatorio; in questo caso, teoricamente,
nulla è garantito.  Mi sbaglio ? Peccato comunque che la maggior parte dei
compilatori C in giro non sia "compliant" con il C99, visti i cambiamenti
in positivo.


 in positivo.
sbagliato; vuol dire "obbligatorio".  ISO/IEC 9899:1999 4.1:
"In this International Standard, 'shall' is to be interpreted as a
*requirement* on an implementation or on a program; conversely, 'shall
not' is to be interpreted as a prohibition.".


 AFAIK, "shall" non ha valore obbligatorio;
Si, lo ha. Ho partecipato a 5 standard IEEE ;-)
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

 Si, lo ha. Ho partecipato a 5 standard IEEE ;-)
<offtopic>
Come devo fare per lavorare al CERN? E' il mio sogno... :)
</offtopic>


 Come devo fare per lavorare al CERN? E' il mio sogno... :)
http://www.cern.ch
https://ert.cern.ch/browse_www/wd_pds?p_web_site_id=1


Grazie a tutti quelli che hanno partecipato a questo thread e che hanno 
contribuito a chiarirmi le idee :-)
Saluti, Alberto

 un tipo standard per un intero ad 8 bit?
in ansi c99 esiste. leggi stdint.h per avere più idee e/o lo standard
e/o un buon manuale.
Ciao

 Quello era l'*altrimenti*.  Io mi riferivo alla prima parte del messaggio.
dipendi da GLib *altrimenti* fai quello che fanno loro e *non* dipendi
da GLib.
ciao,
 Emmanuele.

da GLib.
Che fai ? mi spieghi l'ovvio ? io non intendevo questo.  Intendevo:
come fa GLib a definire un tipo universalmente "lungo" 8 bit.  A meno
di non aderire all'ultimo standard del linguaggio C (che come dice
Maurizio Loreti prevede i tipi di dimensione esatta), prevedere a
priori un tipo int a 8 bit, universalmente valido, non è possibile.
Il "mi chiedo come fa" era riferito alla GLib.


Fa un milione di typedef a seconda della piattaforma per la quale e'
compilato.


compilato.
Appunto.

Andrea Laforgia wrote:

controlla la lunghezza dei tipi di dato noti in funzione della
piattaforma, tramite check a compile time.  poi fa dei giochetti con gli
allineamenti per garantire che gint8 e gint32 siano, rispettivamente, di
8 bit e di 32 bit su tutte le piattaforme supportate da GLib.
http://cvs.gnome.org/viewcvs/glib/configure.in?view=markup
http://cvs.gnome.org/viewcvs/glib/glib/gtypes.h?view=markup
ciao,
 Emmanuele.