Ciao a tutti, avrei una domanda da porre sulla programmazione in C:
la dimensione dei tipi di dato (char, int, float, double e sue varianti) varia a seconda della macchina, come faccio a determinare questa dimensione ?
Moderatore: Staff


printf("size int: %d\n", sizeof(int));
typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef long int int64_t;
typedef long long int int64_t;

lamarozzo ha scritto:Se non sbaglio, negli stardard del C non e' definita la dimensione dei tipi (piuttosto il loro range). Quindi sostanzialmente dipende
dal compilatore. Se si vuole un codice portabile bisogna usare sizeof()

,

signed char: 1
short int: 2
int: 4
long int: 4
long long int: 8
char *: 4
signed char: 1
short int: 2
int: 4
long int: 8
long long int: 8
char *: 8
K&RII pag. 36.int will normally be the natural size for a particular machine[...]either 16 ore 32 bit





giorgik ha scritto:Il range dovrebbe essere dato da -2^n e +(2^n) -1
Siete tutti concordi con me ?

spina ha scritto:Sarebbe interessante che shark provasse il sizeof() su i tipi di dato esportati da /usr/include/stdint.h per vedere se, ad esempio, un int64_t cambia ancora da macchina a macchina. Secondo me scopriamo che cambia la definizione nel file stdint.h ma che la dimensione è sempre di 8 byte.
#ifndef __int8_t_defined
# define __int8_t_defined
typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;
# if __WORDSIZE == 64
typedef long int int64_t;
# else
__extension__
typedef long long int int64_t;
# endif
#endif

Visitano il forum: Nessuno e 1 ospite