Ich bin an C # oder Java gewöhnt.
Wie könnte die folgende Aussage in C korrekt sein?
printf("aaa" "bbb");
Auf meinem Xubuntu 15.04 mit GCC 4.9. Es gibt aus:
aaabbb
Und wie ich es versucht habe, funktioniert darunter auch!
%Vor%Es gibt aus:
%Vor%Ich denke, es sollte ein Komma sein, aber auf diese Weise wird die erste Zeichenfolge als Formatzeichenfolge behandelt. Also, ist diese Syntax legal?
Wie bereits erwähnt, werden benachbarte Zeichenfolgen vom Compiler verkettet. Aber wenn Sie etwas Unterschied sehen möchten, können Sie einen
Null-Terminator in Ihren Strings hinzufügen. aaa
aaa
Beim Hinzufügen von
wird Ihr o / p nur %code% sein, da printf so lange gedruckt wird, bis der 1. %code% null Terminator gefunden wird. aaa
Ausgabe
%code%
Wenn der Compiler zwei aufeinanderfolgende Zeichenfolgen Literale sieht, verkettet er sie (zur Zeit des Parsens im Compiler), wie Sie sehen. Dies funktioniert nicht (Compiler-Syntaxfehler) für Nicht-Literale.
Der Kommaoperator steht nicht mit der Verkettung in Verbindung. Sie wertet zuerst den linken und dann den rechten Operanden aus und verwirft das Ergebnis der linken Seite, um das richtige Ergebnis zu erhalten. Es ist nützlich für Nebenwirkungen (wie progn
in Lisp, ;
in Ocaml, begin
in Scheme). Natürlich wird das Komma auch verwendet, um Argumente in Aufrufen zu trennen.
Wie @Jens sagte, werden benachbarte String-Literale vom Compiler verknüpft.
Ein Grund dafür ist, dass Sie Präprozessor-Dinge wie folgt machen können:
%Vor%Was jedem viel Zeit spart.
Tags und Links c