Einmal vor sehr langer Zeit (lange bevor ich angefangen habe, in C zu programmieren, was vor über 30 Jahren war), mussten die Elementnamen von Strukturelementen in allen Strukturen eines Programms eindeutig sein - statt 'per Struktur-Tag‘als die Anforderung ist jetzt, und hat sich seit den Tagen der K & R gewesen - The C Programming Language 1. Auflage, von Kernighan & Ritchie, 1978
als Folge in jenen Tagen das Präfix die Mitglieder entmischen half von ein Strukturtyp von jedem anderen Strukturtyp. Folglich wuchs die Gewohnheit, solche Präfixe zu verwenden, und es geht mit neueren Strukturtypen weiter. Die struct stat
stammt aus den Tagen des alten Systems; struct iovec
ist eine neuere Erfindung (vielleicht irgendwann in den 1980er Jahren), die der alten Tradition folgte.
Die Verwendung von Präfixen schadet nicht. Es könnte marginal hilfreich sein. Wenn Sie gadzooks.st_mtime
sehen, müssen Sie nicht die Definition von gadzooks
suchen, um mit hoher Sicherheit zu erraten, dass es vom Typ struct stat
ist.
Im Übrigen können Sie eine frühe Version von 'The C-Referenzhandbuch' als Teil der Unix 7. Auflage Handbücher (Unix Programmer's Manual Volume 2A) finden, die sagt (§8.5 auf P244, Hervorhebung hinzugefügt):
Die Namen Strukturelemente und Strukturkennzeichen können die gleichen sein wie gewöhnliche Variablen, da eine Unterscheidung durch Kontext erfolgen kann. Namen von Tags und Membern müssen jedoch eindeutig sein. Der gleiche Mitgliedsname kann in verschiedenen Strukturen nur erscheinen, wenn die beiden Mitglieder vom gleichen Typ sind und wenn ihre Herkunft in Bezug auf ihre Struktur das gleiche ist; so können sich getrennte Strukturen ein gemeinsames Anfangssegment teilen.
Die gleiche Handbuch dokumentiert die lange obsolet =+
Familie der Zuweisungsoperator (im Gegensatz zu dem modernen, seit etwa 1976 bedeutet, +=
Familie der Zuweisungsoperator).
Es sollte jedoch nicht in modernen Code verwendet werden. Solche Präfixe machen das Ändern von Typen oder Refactoring viel schwieriger und dienen keinem Zweck. Anstatt den Typ in einem Variablennamen zu kodieren, sollte man einen Namen verwenden, der beschreibt, wofür das Objekt verwendet wird. was es semantisch beinhaltet. – Olaf
@Olaf Ich sehe nicht, wie Sie sagen können, dass sie "keinen Zweck erfüllen". Eine Verwendung wurde bereits in der Antwort gegeben: den Typ einer Struktur aus den Namen ihrer Mitglieder zu sehen. Eine andere Verwendung ist, dass sie leicht 'grep'pable und' man -K'-fähig sind. –
@MilesRout: Verwenden Sie die richtigen Tools und diese kleinen Profis verschwinden. Aber die Nachteile bleiben. Mit Ihrer Argumentation sollten wir keine Namensräume und Bereiche verwenden. Warum denken Sie, wir haben sie seit Jahrzehnten? Wenn Sie den Typ codieren müssen, tun Sie das im Variablennamen (ungarische Notation, auch schlechte Praxis, siehe Wikipedia), nicht die Mitglieder; Sie werden in einem größeren Projekt sowieso mehrdeutig. – Olaf