Newsgroup: it.comp.os.linux.development
Titolo: __int8, __int16, __int32 e __int64

Saluti.
Mi interessa sapeare se il g++ supporta questi tipi
(che mi sembra sono stati introdotti con l'ISO C9x).
Ho provato con la versione 3 ma mi da errore.
Devo forse impostare qualche cosa?
Saluti e grazie  Manlio Perillo

 Devo forse impostare qualche cosa?
MS mode off :-)
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Devo forse impostare qualche cosa?
bastano un po' di typedef e #ifdef
#include <stdio.h>
int main(void) {
  printf("size of char %d\n", sizeof(char));
  printf("size of short %d\n", sizeof(short));
  printf("size of int %d\n", sizeof(int));
  printf("size of long long %d\n", sizeof(long long));
}
size of char 1
size of short 2
size of int 4
size of long long 8
-- 
#include <stdio.h>/* (C) BW2K+2 This code is released under GPL 2+ */
int main(void){char c[]={98,108,97,107,119,111,108,102,64,116,105,
115,99,97,108,105,46,105,116,32,119,101,98,46,116,105,115,99,97,108,
105,46,105,116,47,98,108,97,107,119,111,108,102,0};printf("%s\n",c);}

 (che mi sembra sono stati introdotti con l'ISO C9x).
Non mi risulta che __int8, __int46, etc, siano previsti dal C99.
Forse intendevi int8_t, int16_t, int32_t e int64_t?
Max


Ma la dimensione degli int non dipende dall'architettura del processore?
--
Alessandro Staltari
staltari(a)
geocities.com

 processore?
dipende dal compilatore. infatti nell'esempio sopra hai degli int a 64 
bit su macchine a 32 bit. 
se usassi un compilatore per a.out, avresti interi a 16 bit su macchine 
a 32



Sicuro?
--
Alessandro Staltari
staltari(a)
geocities.com

 > macchine a 32
non ci metterei la mano sul fuoco (a.out l'avro usato 2 volte in tutto), 
ma l'esempio resta se consideri il dos e un programma compilato con un 
vecchio compilatore tipo il Turbo C della borland: se lo esegui su un 
pentium hai interi a 16 bit su una macchina a 32. Non ti fila il 
discorso?


 Devo forse impostare qualche cosa?
#include <inttypes.h>
i tipi si chiamano int8_t, int16_t, int32_t e int64_t
-- 
 < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
     Don't stand, REACT!      version 0.0.19. C, C++ and ASM developers
                              and beta testers are welcome!

 bastano un po' di typedef e #ifdef
[...]
orrore. inttypes.h serve proprio ad evitare queste porcate


 orrore. inttypes.h serve proprio ad evitare queste porcate
dici davvero?
[wolf@localhost wolf]$ cat /usr/include/inttypes.h | grep int32
[wolf@localhost wolf]$ 


 orrore. inttypes.h serve proprio ad evitare queste porcate
dici davvero?
[wolf@localhost wolf]$ cat /usr/include/inttypes.h | grep int32
[wolf@localhost wolf]$ 
che versione di gcc hai?



Si e no. Quel compilatore usa interi da 16 bit perche' ha come processore di
riferimento l'8086.
Non escludo che un compilatore possa usare interi di dimensione diversa da
quella dei registri del processore, ma che io sappia c'e' una specie di
convenzione in questo senso.
--
Alessandro Staltari
staltari(a)
geocities.com

 di convenzione in questo senso.
il tipo di interi che puoi utilizzare in un programma, dipende solo da 
quale compilatore userai, se mi capisci. Che poi tu usi una macchina a 
1024 bit, o quantistica, non cambia il tipo degli interi che puoi 
utilizzare, se non cambi il compilatore.


 [wolf@localhost wolf]$ 
ancora peggio. inttypes.h è un header standard, se non definisce 
int32_t e gli altri puoi anche buttarlo


 ha scritto nel messaggio
news:Pine.LNX.4.10.102042...@c64.comm2000.it...

Si hai ragione. Ho controllato sul draft e sono effettivamente questi.
Sai se per usarli si deve includere quelche header particolare?
Ciao e grazie  Manlio Perillo


Cioe' se prendo il gcc su una macchina a 32 bit o su una macchina a 64 bit
gli int sono comunque a 32 bit? C'e' qualcuno che puo' confermarlo?
--
Alessandro Staltari
staltari(a)
geocities.com

 int32_t e gli altri puoi anche buttarlo
 
discorsi filosofici a parte, io ho il 2.95.3 per averne verificato piu' 
volte la correttezza degli eseguibili. il 3.X, dai commenti che leggo, 
non e' ancora allo steso livello. 
Tu che compilatore usi?


 che versione di gcc hai?
pre me (2.96) e' :
[code@alpha code]$ cat /usr/include/sys/types.h | grep int32
typedef int int32_t;
typedef unsigned int u_int32_t;
-- 
{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}
SunGray aka Gabriele Lana
contact me @ sungray@tiscalinet
See you space cowboy ...

 [wolf@localhost wolf]$ 
Ma lei non ha detto che la definizione č in quel file, l'importante č
#includerlo.
-- 
Saluti,
    Mardy
http://castellina.org/interlingua

 bit gli int sono comunque a 32 bit?
Potrebbe anche essere:  nulla vieterebbe di fare cosi`.   Di solito come
int  viene scelto  il  tipo di  dato  su cui  il  processore opera  piu`
velocemente. Ad esempio,  su x86, operare  su interi di 64  bit richiede
l'uso di  registri GPR  (32bit per  registro) e  questo fa  diminuire le
prestazioni. Usare  un intero  a  16 bit  diminuisce  le prestazione  in
quanto  il processore  deve accedere  a dati  che potrebbero  non essere
allineati  alla word  (32 bit). Su  un Alpha,  invece, il  tipo di  dato
intero piu`  veloce da usare  dovrebbe essere quello a  64 bit. Tuttavia
poche applicazioni richiedono  interi a 64 bit, il cui  uso fa lievitare
le  dimensioni del  codice. Per questo  si potrebbe  anche scegliere  di
usare un int a 32 bit ed lasciare a 64 bit i long int.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Il dottore mi ha detto di smettere di fare cene intime per quattro.
A meno che non ci siamo altre tre persone.

 [wolf@localhost wolf]$ 
 $ gcc -E - | grep int32
 #include<inttypes.h>
 ^D
 typedef int                     int32_t;
 typedef unsigned int            uint32_t;
Max

discorsi filosofici a parte, io ho il 2.95.3 per averne verificato piu' 
Ora, probabilmente diro` una bestialita`, ma quell'include IMHO non 
dovrebbe far parte del pacchetto di GCC, bensi` di glibc(-devel)...
Infatti, sul mio sistema (RedHat 7.1 + updates + GCC 2.95.3 da
sorgenti, ma in un path inusuale):
ikitt @samurai2 ikitt>$ rpm -qf /usr/include/inttypes.h
glibc-devel-2.2.4-19.3
-- 
Ikitt "di piu` nin zo" (mailserver -> freemail)

 Potrebbe anche essere:  nulla vieterebbe di fare cosi`.
La mia ipotesi deriva dal fatto che molti limiti di linux (per esempio la
dimensione massima di un file) esistevano su architetture a 32 bit e non a
64. La differenza pensavo fosse dovuta a questo.
Alessandro
che appena gli capita una macchina a 64 bit tra le mani fa una prova.

 
Da quello che sono riuscito a trovare qualche tempo fa
in giro sulla rete sembra che per UltraSparc e Itanium
valga:
 
sizeof(short)     = 2
sizeof(int)       = 4
sizeof(long)      = 8
sizeof(double)    = 8
sizeof(void*)     = 8
Quindi gli int (almeno su queste due macchine a 64 bit) sono di 32bit


 int32_t e gli altri puoi anche buttarlo
Tutta la fuffa sta in <stdint.h> che viene incluso da inttypes.h
/*
 *      ISO C99: 7.18 Integer types <stdint.h>
 */
All'inizio c'e' questo commento. Lo standard definisce che i tipi interi
debbano essere definiti qui?
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! I Never Wanted To Be What They Told Me To Be
  		Fulfill My Fate Then I'll Be Free >!- Blind Guardian - Mordred's Song

debbano essere definiti qui?
Allora, il C89 non fornisce tipi di una dimensione predefinita, ma
solo dimensioni minime e metodi per calcolarsi la dimensione at
compiling time (limits.h).
In C99 sono previsti particolari tipi (interi) a dimensione
predefinita. Queste definizioni sono appunto in stdint.h... in C99,
per il C89 puoi solo affidarti a intypes.h, che dovrebbe essere
standard posix o in mancanza affidarsi alle glib.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 interi debbano essere definiti qui?
non conosco lo standard C, parlo dello standard Unix


 debbano essere definiti qui?
Si`. inttypes.h e` un superset di stdint.h. Le definizioni dei tipi sono
in stdint.h, mentre in inttypes.h ci  sono le macro per la formattazione
con printf/scanf piu` varie funzioni per operare su di essi. Trovi tutti
i dettagli nel paragrafo 7.18.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"Sei l'unica donna della mia vita".
(Adamo)