-1
votes

Quelles tailles de type en C vont être constantes sur une plate-forme donnée?

in c, est-il sûr de supposer que tailleof (court) sera 2, ou Tailleof (int) sera 4 sur une plate-forme donnée, par exemple? Même si ceux-ci sont consistants, existe-t-il des tailles de type volatiles, par exemple Tailleof (Double Long) pourrait être de taille 16 varié? Quels types sont sûrs pour supposer que leur taille est constante? Je sais char est l'un d'entre eux Tailleof (Char) est toujours 1, mais tout autre constant?


3 Réponses :


1
votes

Toute variable de taille peut être volatil

Exemple: P>

volatile double x[1000000];


3 commentaires

Ce n'est pas vraiment ce que je voulais dire, désolé d'être incertain.


Ce n'est pas la signification de "volatile" la question pose de la question.


Il n'apparaît pas que l'OP consiste à faire référence au mot-clé volatile , mais plutôt à la notion que les tailles de données peuvent varier entre les implémentations.



4
votes

pour les entiers de taille fixe, comme intz_t Vous pouvez être sûr que la taille est 64 / char_bit . Vous pouvez être sûr que tailleof (char) est 1. À peu près tout le reste a une taille minimale, pas une taille exacte.

Notez que char_bit n'est pas corrigé. Il a une taille minimale de 8. Voir est char_bit jamais> 8?


4 commentaires

Tailleof (INT64_T) peut être inférieur à huit. La "taille" d'un objet en C est le nombre d'octets qu'elle nécessite, mais un octet peut être plus de huit bits dans une implémentation C.


@ERICPOSTPISCHIL Pourquoi un octet serait-il jamais quelque chose que 8 bits?


@ user226527 Il existe des systèmes avec des octets supérieurs à 8. Un octet est vraiment la taille de char .


@ user226527: Parce que C a été conçu pour être une langue portable dans le sens où les compilateurs et les environnements d'exécution pourraient être fournis sur une grande variété de matériel, y compris le matériel qui a utilisé différentes tailles de mots. Il n'y a rien dans les lois de la physique qui nécessite des octets d'être huit bits et que des ordinateurs étaient en cours de développement, une grande variété de conceptions ont été essayées.



3
votes

La taille de int sera dépendante du compilateur. Maintenant, quelques jours, sur la plupart des systèmes, vous trouverez Tailleof (int) à être 4. Plus tôt lorsque les processeurs étaient de 16 bits, un Int était de 2 octets. Mais maintenant, deux jours, 4 seront courants pour int et 8 octets pour long int .

Les normes C ne disent rien de la taille exacte des types entiers à part de char . Un long peut être de 4 octets sur le système de 32 bits et 8 octets sur des systèmes de 64 bits. La norme spécifie toutefois la taille minimale qu'un type de données doit être de.

C standard ne nécessite que les points suivants sur la taille des types

  • tailleOf (char) == 1
  • char_bit > = 8
  • court et int > = 16 bits,
  • long > 32 bits,
  • long long (depuis C99)> = 64 bits
  • Tailleof (Char) <= Tailleof (court) <= Tailleof (int) <= Tailleof (Long) <= Tailleof (long Long)

    Remarque: Les tailles sont déduites de la plage de chaque type de données. C standard ne mentionne pas explicitement les tailles. Il mentionne seulement le Gamme AS -

    • Char : -127 à 127
    • non signé Char : 0 à 255
    • court : -32767 à 32767
    • Sans signé court : 0 à 65535
    • int : -32767 à 32767
    • non signé INT : 0 à 65535
    • long : -2147483647 à 2147483647
    • non signé long : 0 à 4294967295
    • long long : -9223372036854775807 à 9223372036854775807
    • non signé long long : 0 à 18446744073709551615

      Le reste est de la mise en œuvre dépendante. Les compilateurs sont libres d'allouer plus de mémoire que sont spécifiés dans la norme. Donc, dans la plupart des systèmes modernes, vous constaterez que int sera 32 bits, long serait 64 bits et long double < / code> serait 16 octets. Encore une fois, ces valeurs pourraient varier, mais je les ai mentionnées parce qu'elles sont des valeurs communes que vous verriez sur une machine moderne.

      Voici une table de wiki qui donne plus d'informations à ce sujet -

       Entrez la description de l'image ici

      Pour les numéros de points flottants, C ou C ++ ne spécifient rien. Il existe une norme (IEEE754): les flotteurs sont 32 bits et les doubles sont 64. Ceci est une norme matérielle, pas une norme C.


8 commentaires

Que diriez-vous de courts? Y a-t-il des tailles minimales pour le court-circuit?


@ user226527 A court doit être au moins 16 bits de taille identique à celle de int


Notez que la norme C spécifie explicitement les gammes et non des tailles dans les bits.


@_STICTIC_ASSERT C'est correct. Mais nous pourrions déduire les tailles dans les bits de leur gamme


@Abhishek Sûr. Je voulais juste ajouter ce commentaire pour les futurs lecteurs :)


@Abhishek: J'ai pris la liberté de réparer des fautes de frappe. Votre réponse est assez précise et approfondie, mais la norme C spécifie un peu (!) Sur les types de points flottants, mais pas autant que l'IEEE-754.


@Abhishek: La norme C implique-t-elle que tailleof (float) <= tailleof (double) <= tailleof (double double) ?


@chqrlie> Il existe trois types de flottants réels, désignés comme flotteurs, doubles et longs doubles. L'ensemble des valeurs du type float est un sous-ensemble de l'ensemble des valeurs du type double; L'ensemble des valeurs du double double est un sous-ensemble de l'ensemble des valeurs du double double de type. C'est tout ce que j'ai trouvé. Il n'a rien spécifié de la tailles de types de flotteurs