Wird beim Einschließen von Header-Dateien die Groß- / Kleinschreibung beachtet?

8

Gegeben dieser Verzeichnisbaum:

%Vor%

Das Kompilieren von file.cpp funktioniert mit VS, schlägt in gcc fehl.

  • Was sagt der Standard?
  • Wenn der Pfad die Groß- und Kleinschreibung berücksichtigt, warum ist das sinnvoll?
  • Was ist die beste Vorgehensweise, behalten Sie alle Datei- / Ordnernamen in Kleinbuchstaben und machen Sie das gleiche beim Einschließen?

Danke.

    
Idan K 23.12.2009, 10:25
quelle

4 Antworten

21

Die Groß- / Kleinschreibung hängt vom Betriebssystem ab. Windows unterscheidet nicht zwischen Groß- und Kleinschreibung. Linux ist.

BEARBEITEN:

Tatsächlich, wie von Martin York bemerkt, hängt die Groß- und Kleinschreibung vom Dateisystem ab. Standardmäßig verwendet Windows ein Dateisystem ohne Berücksichtigung von Groß- und Kleinschreibung, während Linux Groß- und Kleinschreibung berücksichtigt. Für alle, die wissen möchten, welche Dateisysteme Groß- und Kleinschreibung beachten und welche nicht, gibt es eine umfassende Liste auf Wikipedia: Vergleich von Dateinamenbeschränkungen .

    
Daniel Vassallo 23.12.2009, 10:28
quelle
2
  

Was sagt der Standard?

Die Groß- / Kleinschreibung in #include directions wird von der Implementierung (Compiler / Präprozessor) gesteuert. Dies wird unter 16.2.2 [cpp.include] erläutert:

  

Eine Preprocessing-Direktive des Formulars
# include < h-char-sequence> new-line
  Durchsucht eine Sequenz implementierungsdefinierter Orte nach einem Header, der durch die angegebene Sequenz zwischen den Trennzeichen < und > eindeutig identifiziert wird, und bewirkt, dass diese Anweisung durch den gesamten Inhalt des Headers ersetzt wird. Die Angabe der Orte oder die Identifizierung der Überschrift ist implementierungsdefiniert.

Ähnlich, 16.2.3 [cpp.include]:

  

Eine Preprocessing-Direktive des Formulars
# include " q-char-sequence" new-line
  bewirkt die Ersetzung dieser Direktive durch den gesamten Inhalt der Quelldatei, die durch die angegebene Sequenz zwischen den " Trennzeichen identifiziert wird. Die benannte Quelldatei wird in einer implementierungsdefinierten Weise gesucht. Wenn diese Suche nicht unterstützt wird oder die Suche fehlschlägt, wird die Anweisung erneut so verarbeitet, als ob sie
# include < h-char-sequence> new-line
  mit der identischen enthaltenen Sequenz (einschließlich > -Zeichen, falls vorhanden) aus der ursprünglichen Anweisung.

Eine natürliche Wahl für eine Implementierung der Sprache ist die Verwendung der Groß- / Kleinschreibung des Dateisystems oder Betriebssystems, aber es gibt keine strikte Anforderung (wie alle anderen Antworten nahelegen).

  

Was ist die beste Vorgehensweise? Behalten Sie alle Datei- / Ordnernamen in Kleinbuchstaben und machen Sie das Gleiche beim Einschließen?

Best Practice wie immer: Halten Sie die Dinge konsistent. Wenn Sie in Ihrem Projekt mixed-case-Quell- / Header-Dateien verwenden, verwenden Sie sie weiterhin und replizieren Sie das genaue Gehäuse in Ihren #include -Direktiven.

    
IInspectable 14.05.2016 15:24
quelle
1

Ein weiterer zu beachtender Punkt ist das Pfadtrennzeichen . Obwohl Visual Studio (und andere Windows-IDEs bin mir sicher) entweder '/' oder '\' akzeptieren, sollten Sie immer '/' innerhalb eines Include-Pfades für Portabilität verwenden.

    
Dan 23.12.2009 14:42
quelle
0

Es ist kein C ++ - Standard, es ist der Linux-Weg, bei dem alle Pfadnamen die Groß- / Kleinschreibung beachten. Die beste Vorgehensweise ist es, den gewünschten Dateinamen (meist Kleinbuchstaben) zu wählen und den gleichen Fall in der include-Direktive zu verwenden. Verwenden Sie auch immer relative Dateipfade.

    
Priyank Bolia 23.12.2009 10:28
quelle

Tags und Links