Les deux points après le nom de la variable sur le code C

Dupliquer possible:
Que signifie ‘unsigned temp: 3’

Ceci est un exemple de code C d’une page de référence.

signed int _exponent:8; 

Quelle est la signification du colon avant “8” et “8” lui-même?

C’est un bitfield. Ce n’est valable que dans une définition de struct et cela signifie que le système n’utilisera que 8 bits pour votre entier.

C’est un champ de bits, une caractéristique obscure et erronée des structures. Cela devrait vous suffire pour rechercher les informations dont vous avez besoin pour gérer les champs de bits dans le code des autres. Quant à votre propre code, n’utilisez jamais de champs de bits.

Edit: Comme demandé par Zack, les champs de bits présentent des inconvénients importants par rapport à l’exécution de votre propre calcul arithmétique, sans aucun avantage. En voici quelques uns:

  • Vous ne pouvez copier, comparer, sérialiser ou désérialiser qu’un élément de champ de bits à la fois. En faisant votre propre calcul, vous pouvez utiliser des mots entiers à la fois.
  • Vous ne pouvez jamais avoir un pointeur sur des éléments bitfield. Avec votre propre arithmétique de bits, vous pouvez avoir un pointeur sur le mot le plus gros et un index de bits dans le mot en tant que “pointeur”.
  • La lecture / écriture directe de structures C sur disque ou sur un réseau est relativement simple à transporter, sans champs de bits, à condition que vous utilisiez des types à taille fixe et que vous en connaissiez la finalité. Les champs de bits, cependant, et l’ordre des éléments dans le type le plus grand, ainsi que l’espace total utilisé et l’alignement, dépendent fortement de la mise en œuvre, même au sein d’une architecture de processeur donnée.
  • La spécification C a des règles très étranges qui permettent à la signature d’éléments de champs de bits d’être différente de ce à quoi vous vous attendiez, et très peu de personnes sont au courant.

Pour les indicateurs à un seul bit, utiliser votre propre arithmétique de bits au lieu de champs de bits est une évidence. Pour des valeurs plus importantes, vous devez compresser, s’il est trop pénible d’écrire toute l’arithmétique de bits, écrivez quelques macros simples.

C’est une spécification de bitfield .

Cela signifie que _exponent ne prend que 8 bits de l’ signed int ce qui prend généralement plus de 8 bits. Généralement, les champs de bits sont utilisés avec des types non signés.

IIRC, le compilateur avertirait si quelque chose qui ne rentre pas dans 8 bits est écrit dans _exponent .

Lorsque cette instruction est à l’intérieur d’une structure, signifie champs de bits .