Veuillez ne pas utiliser des choses comme "vps_t".
C'est une erreur d'utiliser typedef pour les structures et les pointeurs. Quand vous voyez un
vps_t a;
dans la source, qu'est-ce que cela signifie?
En revanche, si elle dit
struct virtual_container *a;
vous pouvez réellement dire ce qu'est un "a".
Beaucoup de gens pensent que les typedefs "aident à la lisibilité". Mais non. Ils ne sont utiles que pour:
(a) des objets totalement opaques (où le typedef est activement utilisé pour cacher ce qu'est l'objet).
Exemple: "pte_t" etc. objets opaques auxquels vous ne pouvez accéder qu'en utilisant les fonctions d'accesseur appropriées.
REMARQUE! L'opacité et les «fonctions d'accesseur» ne sont pas bonnes en soi. La raison pour laquelle nous les avons pour des choses comme pte_t etc. est qu'il n'y a vraiment absolument aucune information accessible de manière portable.
(b) Effacer les types entiers, où l'abstraction permet d' éviter toute confusion, qu'elle soit "int" ou "longue".
u8 / u16 / u32 sont des caractères typographiques parfaitement fins, bien qu'ils s'inscrivent mieux dans la catégorie (d) qu'ici.
REMARQUE! Encore une fois - il doit y avoir une raison à cela. Si quelque chose est "non signé longtemps", alors il n'y a aucune raison de le faire
typedef unsigned long myflags_t;
mais s'il existe une raison claire pour laquelle, dans certaines circonstances, il peut s'agir d'un "entier non signé" et dans d'autres configurations, il peut être "non signé long", alors allez-y et utilisez un typedef.
(c) lorsque vous utilisez clairsemé pour créer littéralement un nouveau type pour la vérification de type.
d) Nouveaux types identiques aux types C99 standard, dans certaines circonstances exceptionnelles.
Bien qu'il ne faudrait que peu de temps aux yeux et au cerveau pour s'habituer aux types standard comme «uint32_t», certaines personnes s'opposent quand même à leur utilisation.
Par conséquent, les types 'u8 / u16 / u32 / u64' spécifiques à Linux et leurs équivalents signés qui sont identiques aux types standard sont autorisés - bien qu'ils ne soient pas obligatoires dans votre nouveau code.
Lorsque vous modifiez un code existant qui utilise déjà l'un ou l'autre ensemble de types, vous devez vous conformer aux choix existants dans ce code.
(e) Types sûrs pour une utilisation dans l'espace utilisateur.
Dans certaines structures qui sont visibles pour l'espace utilisateur, nous ne pouvons pas exiger de types C99 et ne pouvons pas utiliser le formulaire 'u32' ci-dessus. Ainsi, nous utilisons __u32 et des types similaires dans toutes les structures partagées avec l'espace utilisateur.
Il y a peut-être d'autres cas aussi, mais la règle devrait être de ne JAMAIS utiliser un typedef à moins que vous ne puissiez clairement correspondre à l'une de ces règles.
En général, un pointeur ou une structure contenant des éléments auxquels on peut raisonnablement accéder directement ne doit jamais être un typedef.