la taille des types de données de base en C

J'ai un exemple de programme que j'ai copié à partir d'un certain site web.

int main(void)
{
   int answer;
   short x = 1;
   long y = 2;
   float u = 3.0;
   double v = 4.4;
   long double w = 5.54;
   char c = 'p';

   typedef enum
   {
      kAttributeInvalid,
      kBooleanAttributeActive,
      kBooleanAttributeAlarmSignal,
      kBooleanAttributeAlign64,
      kBooleanAttributeAutoNegotiationComplete,
   }codes_t;

  /* __DATE__, __TIME__, __FILE__, __LINE__ are predefined symbols */
  #if 0
  printf("Date : %s\n", __DATE__);
  printf("Time : %s\n", __TIME__);
  printf("File : %s\n", __FILE__);
  printf("Line : %d\n", __LINE__);
  #endif

  /* The size of various types */
  printf("The size of int         %zu\n", sizeof(answer));
  printf("The size of short       %zu\n", sizeof(x));
  printf("The size of long        %zu\n", sizeof(y));
  printf("The size of float       %zu\n", sizeof(u));
  printf("The size of double      %zu\n", sizeof(v));
  printf("The size of long double %zu\n", sizeof(w));
  printf("The size of char        %zu\n", sizeof(c));
  printf("The size of enum        %zu\n", sizeof(codes_t));

  return 0;
}

J'ai exécuté ce programme et le résultat que j'ai obtenu comme suit.

The size of int         4
The size of short       2
The size of long        8
The size of float       4
The size of double      8
The size of long double 16
The size of char        1
The size of enum        4

Je suis en cours d'exécution ce sur un PC sous linux qui est en cours d'exécution 64 bits d'Ubuntu.Ma question est si je devais exécuter le même programme sur une machine 32 bits vais-je voir des résultats différents.En d'autres termes, la taille de la base de données dépendent du type de

  1. processeur
  2. Système D'Exploitation
  3. autre chose
Il a littéralement dépend de tout.
Pour moi, la seule hypothèse sur, par exemple. de la taille d'un int, c'est que la taille d'un int est toujours sizeof(int)
Aussi sizeof(int) >= 2 tel que défini dans la norme ANSI C. en dehors de cela, tous les paris sont éteints.
La taille de float et double doit être d'au moins 4 et 8, respectivement. 2 <= court <= int <= long. Et 1 <= char. Sinon, tous les paris sont éteints, comme SecurityMatt dit.
Lèche Pas. char pouvez avoir plus de 8 bits, de sorte sizeof(int) == 1 est possible, par exemple sur la TI 28Cxx où les deux ont 16 bits.

OriginalL'auteur liv2hak | 2013-02-11