Ceci est en référence à La structure des informations sur un fichier inode : Je cherche vraiment tout type de réponse. J'ai remarqué que tous les champs commencent par st _ code> et ne peuvent pas trouver une bonne explication sur Internet. P> P>
3 Réponses :
Je supposerais que c'est une convention de dénomination afin que lorsque vous voyez st _..., vous savez que cela fait partie de la structure statistique (qui commence avec ST). P>
Je ne pensais pas que ce serait aussi simple mais il semble donc, merci.
Cela remonte un long chemin, tout au long des premières versions C. Ils n'avaient pas de table de symboles séparés pour les membres de la structure, les noms ont été ajoutés à la table des symboles mondiaux. Avec la pollution évidente de l'espace de noms mondial mondial qui cause. La solution de contournement était la même que vous utilisez sur Enums aujourd'hui, préfixez-les avec quelques lettres pour éviter les collisions de noms. P>
C'est une sorte d'enregistrement historique. Lorsque vous voyez une structure avec ce type de noms de membres, vous savez que c'est vieux em>. P>
En plus de la réponse de Hans, je pense que le nom de collision de nom est toujours d'actualité. Même si des champs modernes C C'est l'une des raisons pour lesquelles tout le monde utilise normalement les majuscules pour les macros et les minuscules pour d'autres identifiants, mais malheureusement, cela n'est pas toujours possible. La bibliothèque C elle-même a des macros en minuscule: fondamentalement, toutes les fonctions de la bibliothèque peuvent avoir une contrepartie macro qui "surcharge" la fonction à des fins d'optimisation. Dans votre exemple, vous pouvez facilement imaginer en C (POSIX, tout) apparaissant une fonction avec C11 et ses macros génériques de type qui utilisent Tout cela s'applique non seulement aux membres code> struct code>, mais également aux noms de paramètres et aux variables des fonctions code> inline code>. p> STREST CODE> ne sont pas dans l'espace de nom global, ils peuvent entrer en conflit avec les définitions de macro. P>
blksize code>. S'il n'y aurait pas de
_generic code> de telles macros seront encore plus courants. Donc, si vous concevez une bibliothèque qui doit être utilisée dans beaucoup de code dans lequel vous n'avez pas la main sur la manière dont les identifiants sont choisis, vous feriez encore mieux avec une telle convention de dénomination. P>
Un exemple est des macros comme #define st_atime st_atim.tv_sec code>, ce qui fait
st_atime code> un nom global qui ne respecte pas les règles de mise en scorage.
Pour indiquer qu'ils contiennent des données code> statistiques code>.