51 votes

En C/C++, existe-t-il une directive similaire à #ifndef pour les typedefs ?

Si je veux définir une valeur uniquement si elle n'est pas définie, je fais quelque chose comme ceci :

#ifndef THING
#define THING OTHER_THING
#endif

Et si THING est un typedef d, et non défini ? Je voudrais faire quelque chose comme ceci :

#ifntypedef thing_type
typedef uint32_t thing_type
#endif

Le problème s'est posé parce que je voulais vérifier si une bibliothèque externe avait déjà défini la fonction boolean mais je serais ouvert à une solution plus générale.

-1voto

Maxim Yegorushkin Points 29380

Sans avoir à utiliser une macro, vous pouvez déterminer si un typedef de l'espace de noms est défini en vérifiant si la compilation échoue. S'il s'agit d'un typedef imbriqué dans une structure, SFINAE peut être utilisé.

Pour le typedef de l'espace de noms, vous pouvez faire les deux en même temps :

typedef int some_type
#define some_type some_type

Et puis :

#ifdef some_type
    some_type some_var;
#endif

C'est-à-dire some_type est à la fois une macro de préprocesseur et un typedef.

-1voto

Ubiquité Points 892

Ce n'est pas transparent mais vous pouvez essayer de le compiler une fois sans typedef (en utilisant simplement l'alias), et voir si cela compile ou non.

-1voto

didi Points 1

Il n'y a pas de telles choses. Il est possible de désactiver cette erreur du compilateur duplicate_typedef. "Le nom du typedef a déjà été déclaré (avec le même type)"

D'un autre côté, pour certaines définitions typographiques standardisées, il existe souvent une macro de préprocesseur définie comme __bool_true_false_are_defined pour bool qui peut être utilisée.

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