42 votes

En C, que signifie un colon dans une déclaration?

Dupliquer possible:
Que signifie 'unsigned temp: 3'

J'apprends un peu le code du noyau et voici la ligne suivante (sous linux 2.4, sched.h, struct mm_struct):

 unsigned dumpable:1;
 

Qu'est-ce que ça veut dire?

56voto

KennyTM Points 232647

C'est un champ de bits membre. Votre code signifie que l' dumpable occupe exactement bit à 1 dans la structure.

Bitfields sont utilisés lorsque vous souhaitez membres de la meute au niveau des bits. Cela peut réduire considérablement la taille de la mémoire utilisée lorsqu'il y a beaucoup de drapeaux dans la structure. Par exemple, si nous définissons une structure disposant de 4 membres de la contrainte numérique

0 < a < 20
    b in [0, 1]
0 < c < 8
0 < d < 100

ensuite, la structure pourrait être déclaré comme

struct Foo {
   unsigned a : 5;   // 20 < 2^5 = 32
   unsigned b : 1;   // 
   unsigned c : 3;   // 
   unsigned d : 7;   // 100 < 2^7 = 128
};

puis les bits de Foo peuvent être disposés comme

                      ddddddd c  cc b aaaaa
---------  ---------  ---------  ----------
                       octet 1     octet 0
===========================================
                uint32

au lieu de

struct Foo {
   unsigned a;
   unsigned b;
   unsigned c;
   unsigned d;
};

dans lequel de nombreux bits sont gaspillées en raison de la gamme de valeurs

# wasted space which is not used by the program
# v                                     v
                             ddddddd                                  ccc
------------------------------------ ------------------------------------
            uint32                                 uint32


                                   b                                aaaaa
------------------------------------ ------------------------------------
            uint32                                 uint32

ainsi, vous pouvez économiser de l'espace par l'emballage de nombreux membres de l'ensemble.

Notez que la norme ne précise pas comment le bitfields sont arrangés ou emballés dans une "adressable de l'unité de stockage". Aussi, bitfields sont plus lent par rapport direct avec l'accès des membres.

5voto

Airsource Ltd Points 14291

Cela signifie qu’il s’agit d’un champ de bits - c’est-à-dire que la taille du fichier pouvant être jeté est un bit unique et que vous ne pouvez lui affecter que 0 ou 1. Normalement utilisé dans l'ancien code pour économiser de l'espace, ou dans le code de bas niveau qui s'interface avec le matériel (même si l'emballage n'est pas portable). Voir ici pour plus d'informations

3voto

Justin Niessner Points 144953

Si je me souviens bien, lorsqu'il est utilisé à l'intérieur d'une structure, le nombre après les deux points indique le nombre de bits constituant la variable (ou un champ binaire).

So unsidgned dumpable:1; est un bitfield bitfield.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X