Wie Sie eine Datei in C und / oder C ++ einbinden

8

Ich habe eine Header-Datei, die ich aus einer anderen Quelldatei mit include pre-processor-Verzeichnis einfügen möchte. Ich habe versucht, sowohl zitierte Form als auch Winkel-Brake-Form zu verwenden, aber keiner scheint den Job zu tun.

Der Dateiname ist .>"hello.h und ein Verzeichnis, in dem der Compiler sucht. Ich habe versucht, es so einzuschließen:

  • #include <.>"hello.h>
  • #include <.\>"hello.h>
  • #include <.\>\"hello.h>
  • #include ".>"hello.h"
  • #include ".>\"hello.h"

Ich habe auch verschiedene C und C ++ Compiler ausprobiert - clang, gcc, clang ++ und g ++.

Offensichtlich funktionierte nichts von dem oben Gesagten oder anderweitig, es wäre keine Frage gewesen.

Ich dachte, dass der Name vielleicht nicht dem Standard entspricht. Leider habe ich weder C noch C ++ Standard-Spezifikationen zur Hand. Die einzige maßgebliche Informationsquelle, die ich finden konnte, war diese MSDN -Seite über #include directory und GNU C Präprozessordokumentation, hier . Die GNU-Dokumentation sagt nicht viel, MSDN hat jedoch die folgende Klausel:

  

Die Pfadangabe ist ein Dateiname, dem optional ein Verzeichnis vorangestellt ist   Spezifikation. Der Dateiname muss eine vorhandene Datei benennen. Die Syntax von   Die Pfadangabe hängt vom Betriebssystem ab, auf dem sich das Programm befindet   kompiliert.

Ich bin neugierig, was C und C ++ - Standards dazu sagen?

Wo finde ich diese betriebssystemspezifischen Regeln für die Benennung von C und C ++ - Headerdateien? Ich bin besonders an OS X, Linux und FreeBSD interessiert.

Warum funktioniert es nicht, < und / oder " Zeichen zu umgehen?

Wie schließe ich meine Datei an?

    
Brian Tompsett - 汤莱恩 15.08.2013, 17:31
quelle

4 Antworten

10

Ich denke, Sie haben Pech mit diesem Dateinamen von der draft C99 standard Abschnitt 6.4.7 Header names Die Grammatik ist wie folgt:

%Vor%

Sie haben sowohl einen " als auch > im Dateinamen, was Sie von der q-char und h-char Spezifikation ausschließt. Ich glaube nicht, dass Sie eine andere Wahl haben, als den Dateinamen zu ändern.

Die Grammatik ist die gleiche in der draft C++ standard , Abschnitt 2.9 Header names .

    
Shafik Yaghmour 15.08.2013, 17:38
quelle
5

In C und C ++ ist das kein gültiger Header-Name, da er sowohl > als auch " enthält.

Die Syntax für Header-Namen erlaubt, dass die durch <> begrenzten Elemente "jedes Element des Quellzeichensatzes außer new-line und > " enthalten und die durch "" begrenzten Zeichen "jedes Element der Quelle enthalten" Zeichensatz außer new-line und " ". Es gibt kein Konzept für eine Escape-Sequenz.

    
Mike Seymour 15.08.2013 17:36
quelle
2

"und & gt; sind keine gültigen Zeichen für einen Dateinamen in Windows. Ihr Dateiname sollte hello.h oder. \ hello.h oder .. \ hello.h sein, aber nicht. & gt;" hello.h.

%Vor%

Aus diesem Grund werden Sie in MSDN nichts darüber finden.

ext3 erlaubt die meisten Zeichen (mehrere müssen bei Verwendung maskiert werden), aber es wird dringend empfohlen, dass Sie sie nicht verwenden, wenn Sie Ihre Header- und Quelldateien benennen (nur aus Gründen der Lesbarkeit). Für weitere Informationen: Ссылка

    
Zac Howland 15.08.2013 17:35
quelle
0

Was ein akzeptabler Dateiname ist, ist die Implementierung definiert. Ich hätte erwartet, dass #include ".>\"hello.h" to work, at least on systems where '& gt;' and '"' 'in Dateinamen legal sind, aber Es gibt keine Anforderung, dass es funktioniert, und es gibt eindeutig Systeme, in denen es nicht, weil solche Namen in der nicht legal sind System.

Sie könnten versuchen, das Problem zu erzwingen:

%Vor%

Aber aus praktischen Gründen sollten Sie Ihre Dateinamen auf beschränken alphanumerische Zeichen, Unterstriche und vielleicht Bindestriche (aber ich wäre es leary von denen auch). Und mit nur einem Punkt, vor dem Erweiterung. Wenn Sie nach Ärger suchen, seien Sie nicht überrascht, wenn Du findest es.

Was natürlich Ihre letzte Frage beantwortet: Wie schließe ich ein? die Datei. Sie benennen es in etwas Sinnvolles um.

    
James Kanze 15.08.2013 17:40
quelle

Tags und Links