Dies ist in Bezug auf die Struktur für Informationen über einen Datei-Inode :
%Vor% Ich suche nur nach irgendeiner Art von Antwort. Ich habe bemerkt, dass alle Felder mit st_
beginnen und im Internet keine gute Erklärung finden.
Das geht weit zurück bis zu den ersten C-Versionen. Sie hatten keine separate Symboltabelle für Strukturelemente, die Namen wurden der globalen Symboltabelle hinzugefügt. Mit der offensichtlich fiesen globalen Namensraumverschmutzung, die verursacht. Die Problemumgehung war dieselbe, die Sie heute für Enums verwenden. Fügen Sie ihnen ein paar Buchstaben voran, um die Namenskonflikte zu vermeiden.
Es ist eine Art historischer Rekord. Wenn Sie eine Struktur mit diesen Elementnamen sehen, wissen Sie, dass sie alt ist.
Zusätzlich zu Hans 'Antwort denke ich, dass Namenskollisionssache immer noch aktuell ist. Obwohl moderne C struct
-Felder nicht im globalen Namensraum sind, können sie mit Makrodefinitionen in Konflikt stehen.
Dies ist einer der Gründe, warum normalerweise Großbuchstaben für Makros und Kleinbuchstaben für andere Bezeichner verwendet werden, aber das ist leider nicht immer möglich. Die C-Bibliothek selbst hat Makros, die in Kleinbuchstaben geschrieben sind: Grundsätzlich kann jede Funktion in der Bibliothek ein Makro-Gegenstück haben, das die Funktion zu Optimierungszwecken "überlädt". In Ihrem Beispiel können Sie sich leicht vorstellen, dass in C (POSIX, was auch immer) eine Funktion blksize
erscheint. Wenn es kein st_
Präfix für die stat
Mitglieder eines Tages gäbe, würden Sie in Schwierigkeiten geraten.
Mit C11 und seinem Typ generische Makros, die _Generic
verwenden, sind solche Makros noch häufiger. Wenn Sie also eine Bibliothek entwerfen, die in einer Menge Code verwendet werden soll, in dem Sie nicht wissen, wie die Identifikatoren ausgewählt werden, wäre eine solche Namenskonvention noch besser.
All dies gilt nicht nur für struct
members, sondern auch für Parameternamen und Variablen von inline
functions.