Warum heißen die Felder in 'struct stat' st_something?

8

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.

    
joethecoder 26.04.2012, 00:55
quelle

3 Antworten

15

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.

    
Hans Passant 26.04.2012, 01:07
quelle
4

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.

    
Jens Gustedt 26.04.2012 06:32
quelle
0

Ich würde annehmen, dass es eine Namenskonvention ist, so dass Sie, wenn Sie st _... sehen, wissen, dass es Teil der stat-Struktur ist (die mit st beginnt).

    
happydave 26.04.2012 00:58
quelle

Tags und Links