tableau de type void

plaine C disposent d'une fonctionnalité intéressante - les pointeurs de type void, qui peut être utilisé comme pointeur vers n'importe quel type de données.

Mais, supposons que j'ai structure suivante:


struct token {
    int type;
    void *value;
};

où la valeur du champ peut pointer vers char tableau, ou int, ou quelque chose d'autre.

Donc, lors de l'attribution nouvelle instance de cette structure, j'ai besoin de:

1) alloue de la mémoire pour ce struct;

2) allouer de la mémoire pour la valeur et l'affecter à la valeur du champ.

Ma question est, est-il possible de déclarer "array de type void", qui peut être utilisé pour tout autre type void pointeur?

Tout ce que je veux est d'utiliser des "flexible membre de tableau" (décrit dans 6.7.2.1 standard C99) avec la possibilité de casting pour n'importe quel type.

Quelque chose comme ceci:


struct token {
    int type;
    void value[];
};

struct token *p = malloc(sizeof(struct token) + value_size);
memcpy(p->value, val, value_size);
...
char *ptr = token->value;

Je suppose déclarant jeton->valeur de type char ou int tableau et la conversion de types nécessaire plus tard va faire ce travail, mais peut être très déroutant pour quelqu'un qui va lire ce code plus tard.

  • Double pointeurs?
  • à l'aide de char[] est très bien à mon humble avis, depuis sizeof(char) == 1 et vous ne serez jamais surpris. Vous pourriez envisager de macros pour accéder à p->value avec le type correct.
InformationsquelleAutor S.J. | 2011-04-25