Was ist das Besondere an C ++ - Header-Dateien mit Single-Letter-Erweiterungen?

8

Der C ++ Standard enthält die folgende Regel in Abschnitt 16.2, Quelldateieinschluss. Es macht irgendwie Einzel-Dateierweiterung irgendwie.

  

Die Implementierung muss eindeutige Zuordnungen für Sequenzen bereitstellen, die aus einer oder mehreren Nicht-Ziffern oder Ziffern (2.11) bestehen, gefolgt von einem Punkt ( . ) und einem einzelnen nichtigit . Das erste Zeichen darf keine Ziffer sein . Die Implementierung kann Unterscheidungen in alphabetischer Reihenfolge ignorieren.

Welche spezielle Behandlung erhalten diese Dateinamen? Was ist ein Mapping im Kontext der Header-Datei-Inclusion und warum ist es wichtig, ob es eindeutig ist?

    
Ben Voigt 28.03.2014, 00:52
quelle

1 Antwort

4

Es wird gesagt, dass Header-Dateien wie zB "abyssinia.h" auf dem normalen Umweg einem eindeutigen Dateinamen im Dateisystem zugeordnet werden sollen, selbst wenn das zugrunde liegende Dateisystem 9.1 Dateinamen nicht unterstützt DOS im alten Stil mit der Beschränkung 8.3 oder die ältesten Versionen von Unix mit maximal 14 Zeichen für einen Dateinamen. Das System muss sicherstellen, dass solche Namen eindeutig verschiedenen Dateien zugeordnet werden.

Es besagt auch, dass die Implementierung Groß- / Kleinschreibung ignorieren kann (was auch bedeutet, dass Groß- und Kleinschreibung nicht ignoriert werden darf). Wenn case ignoriert wird, werden "ABYSSINIA.H" und "abyssinia.h" der gleichen Datei zugeordnet. Wenn Groß- und Kleinschreibung nicht ignoriert wird, handelt es sich um zwei separate Dateien. Beachten Sie, dass Windows und Mac OS X standardmäßig mindestens caseerhaltende, aber case-insensitive Dateisysteme haben.

Ich bin nicht sicher, warum die einzige Nicht-Ziffern-Einschränkung vorhanden ist; Es bedeutet vermutlich, dass die .hpp -Erweiterung nicht eindeutig eindeutigen Namen zugeordnet werden kann.

Dies ist alles eine Einschränkung für die Implementierung; Es beeinflusst Sie als Programmierer meistens nicht (es sei denn, Sie schreiben als Programmierer die Implementierung - also die Implementierung eines C ++ - Compilers), außer dass Sie wahrscheinlich sicherstellen sollten, dass Ihre Header-Namen unabhängig von Groß- und Kleinschreibung und für maximale Portabilität sind , Ihre Header-Namen sollten .h oder eine andere Single-Letter-Erweiterung enden.

    
Jonathan Leffler 02.04.2014 02:02
quelle

Tags und Links