Existe-t-il un bon moyen de forcer l’incompatibilité des types en C?

À des fins de vérification de type, j’aimerais définir une fonction sur les lignes de

void myfunc(type1 a, type2 b) { ... } 

type1 et type2 sont tous deux typés avec uint8_t . Jusqu’ici tout va bien, mais pour des raisons de sécurité et de vérification (pensez à DBC), je voudrais éviter que la fonction soit appelée avec une valeur de type2 pour le premier paramètre ou un type1 pour le second. Malheureusement, la conversion implicite de C est contre moi ici. Est-ce que quelqu’un connaît un moyen?

Vous pouvez envelopper les deux types dans une structure.

 typedef struct { uint8_t data; } type1; typedef struct { uint8_t data; } type2; 

Edit: Je ne l’aime pas parce qu’il faut maintenant utiliser a.data au lieu de

Je pense que vous pouvez envelopper vos types en utilisant struct, puis passer un pointeur à ces structs.