Je mehr ich versuche, dieses verblüffte Rätsel zu verstehen, desto mehr möchte ich aufgeben.
%Vor%Wie läuft es für diesen einzeiligen Quellcode ab, genau die gleiche Ausgabe zu erzeugen, wenn das Programm ausgeführt wird, und gibt es irgendeine allgemeine Vorstellung für diese Art von Programmen?
Dies nennt man Quine .
Sehen wir mal, was main()
macht:
34 ist der ASCII-Code für das Zeichen "
(double quote), also ist das das Gleiche wie:
Das erste Argument für printf(3)
ist die Formatzeichenfolge. Die übergebene Zeichenfolge lautet:
Also gibt printf(3)
genau das aus, aber beachte die Formatbezeichner %c
, %s
und %c
, die printf(3)
anweisen, ein Zeichen zu drucken, gefolgt von einer Zeichenkette gefolgt von einem anderen Zeichen in dieser Ort, die jeweils das 2., 3. und 4. Argument sind.
Die Zeichen, wie wir gesehen haben, sind beide "
und die Zeichenkette ist wieder s
(die gleiche Zeichenkette). Also ist die Programmausgabe:
Dabei ist X
die Zeichenkette s
im Programm. Also bekommen wir das als Ausgabe:
Was interessanterweise die Programmquelle selbst ist.
Um den Code zu verstehen, vereinfachen und formatieren Sie ihn zunächst:
%Vor% und verwendet s
als Formatierungszeichenfolge, um drei Entitäten zu drucken: 34
, die Zeichenfolge s
selbst und 34
. In diesem Fall ist der wichtige Teil der Formatierungszeichenfolge s
:
bedeutet, dass die beiden 34
s zu doppelten Anführungszeichen werden ( "
) und die Formatierungszeichenfolge s
nur als normale Zeichenfolge ausgegeben wird. Jetzt sollten Sie den Rest der Formatierungszeichenfolge sehen s
ist nur eine Kopie des gesamten Programms.