Eine etwas seltsame Frage: Wenn ich mich richtig erinnere, benötigt der C ++ - Quellcode kein Dateisystem, um seine Dateien zu speichern.
Ein Compiler, der handgeschriebene Papiere über eine Kamera scannt, wäre eine konforme Implementierung. Obwohl praktisch nicht so viel Sinn macht.
C ++ 20 fügt jetzt jedoch den Quellspeicherort mit hinzu file_name
. Bedeutet dies nun, dass der Quellcode immer in einer Datei gespeichert werden sollte?
__FILE__
. Mit Classsource_location
können Sie es nur auf der Site für Funktionsaufrufe abrufen.<iostream>
, die möglicherweise keine Dateien sind (wenn Sie sehen, was ich meine), nicht die von Entwicklern geschriebenen Dateien?Antworten:
Nein, der Quellcode muss nicht aus einer Datei stammen (oder zu einer Datei gehen).
Sie können C ++ vollständig innerhalb einer Pipe kompilieren (und verknüpfen), indem Sie Ihren Compiler in die Mitte stellen, z
und das ist seit Jahrzehnten so. Siehe auch:
Die Einführung
std::source_location
in C ++ 20 ändert nichts an diesem Sachverhalt. Es ist nur so, dass einige Codes keinen genau definierten Quellspeicherort haben (oder dass sie genau definiert, aber nicht sehr aussagekräftig sind). Eigentlich würde ich sagen, dass das Bestehen auf der Definitionstd::source_location
mithilfe von Dateien etwas kurzsichtig ist ... obwohl es fairerweise nur ein makroloses Äquivalent von ist__FILE__
und__LINE__
das bereits in C ++ (und C) existiert.@ HBv6 stellt fest, dass, wenn Sie den Wert von
__FILE__
beim Kompilieren mit GCC aus dem Standardeingabestream drucken :Ausführen der resultierenden ausführbaren Ausdrucke
<stdin>
.Der Quellcode kann sogar aus dem Internet stammen.
@ Morwenn stellt fest, dass dieser Code:
funktioniert auf GodBolt ( funktioniert aber nicht auf Ihrem Computer - kein beliebter Compiler unterstützt dies.)
Sind Sie ein Sprachanwalt? Ok, also lasst uns den Standard konsultieren.
Die Frage, ob C ++ - Programmquellen aus Dateien stammen müssen, wird im Sprachstandard nicht eindeutig beantwortet. In Abschnitt 5.1 [lex.separate] wird ein Entwurf des C ++ 17-Standards (n4713) betrachtet:
Der Quellcode wird also nicht unbedingt in einer Datei an sich gespeichert, sondern in einer "Einheit, die als Quelldatei bezeichnet wird". Aber woher kommen dann die Includes? Man würde annehmen, dass sie aus benannten Dateien im Dateisystem stammen ... aber auch das ist nicht vorgeschrieben.
Jedenfalls
std::source_location
scheint sich dieser Wortlaut in C ++ 20 nicht zu ändern oder seine Interpretation (AFAICT) zu beeinflussen.quelle
Schon vor C ++ 20 hatte der Standard:
Die Definition ist die gleiche für
source_location::file_name
.Daher hat sich an der Unterstützung für implementierungen ohne Dateisystem in C ++ 20 nichts geändert.
Der Standard definiert nicht genau, was "Quelldatei" bedeutet. Ob es sich also um ein Dateisystem handelt, kann interpretiert werden. Vermutlich könnte es für eine Implementierung konform sein, "die handschriftliche Notiz zu erstellen, die Sie mir gerade gegeben haben", wenn dies tatsächlich die "Quelldatei" in dieser Implementierung der Sprache identifiziert.
Fazit: Ja, Quellen werden vom Standard als "Dateien" bezeichnet, aber was eine "Datei" ist und ob ein Dateisystem beteiligt ist, ist nicht spezifiziert.
quelle
scanner-c++
, wie "Linker Schrank, dritte Schublade, vierter Ordner mit roten Registerkarten, Seite 17" zurückgegeben wird .