Es wurden einige gute Vorschläge gemacht, aber keiner von ihnen ist möglicherweise so klar oder wartbar wie nur vier separate Aufrufe von printf().
– Clifford
17. November 2009 um 23:45 Uhr
@Clifford: dann könntest du C++ schreiben, damit cout für dich besser aussieht.
– Prüfen
18. November 2009 um 7:17 Uhr
Wenn Sie ein Zeichenfolgenliteral auf mehrere Zeilen aufteilen möchten, können Sie mehrere Zeichenfolgen miteinander verketten, eine in jeder Zeile, wie folgt:
nur kommentieren, um die wenig bekannte C-Tatsache zu erklären, dass Leerzeichen zwischen zwei Zeichenfolgen eine Verkettung sind.
– Brian Postow
17. November 2009 um 22:00 Uhr
@Lundin Jede Variable und ihren Wert klar in einer eigenen Zeile darzustellen, ist für mich viel einfacher zu lesen. Können Sie sich einen Debugger in einer IDE vorstellen, der alle Variablen und Werte in einer einzigen Zeile ablegt? Ich kann nicht. (Ja, ich weiß, dass keine Zeilenumbrüche zwischen die einzelnen Zeichenfolgen eingefügt werden, aber ich vergleiche die Lesbarkeit des Quellcodes mit der Lesbarkeit von Variablen in einem Debugger.)
– byxor
11. Juli 2017 um 16:33 Uhr
Wird diese Verkettung vom Präprozessor vorgenommen?
– Debüt
5. Dezember 2017 um 15:07 Uhr
qrdl
Der C-Compiler kann benachbarte String-Literale zu einem zusammenfügen, wie z
printf("foo: %s "
"bar: %d", foo, bar);
Der Präprozessor kann einen umgekehrten Schrägstrich als letztes Zeichen der Zeile verwenden, wobei CR (oder CR/LF, wenn Sie aus Windowsland stammen) nicht mitgezählt wird:
printf("foo %s \
bar: %d", foo, bar);
Das erste wurde bereits vorgeschlagen, das zweite leidet darunter, dass es bricht, wenn es irgendwelche Leerzeichen gibt nach das ‘\’; ein Fehler, der verwirrend sein kann, wenn er auftritt.
– Clifford
17. November 2009 um 23:43 Uhr
Keines dieser beiden Beispiele hat irgendetwas mit dem C-Präprozessor zu tun.
– Dan Formen
18. November 2009 um 5:15 Uhr
@Dan mein cpp scheint zu verstehen / (siehe meine Bearbeitung oben). Ich bin mir nicht sicher, ob dies ein Standardverhalten ist.
– Sigissaft
18. November 2009 um 7:12 Uhr
@Dan Während das Verbinden benachbarter Literale entweder mit dem Präprozessor oder dem Compiler durchgeführt werden kann (in der letzten Phase vor der eigentlichen Kompilierung), wird die Behandlung der Zeilenfortsetzung vom Präprozessor durchgeführt, da sonst mehrzeilige Makros nicht implementiert werden können. Siehe auch hier – gcc.gnu.org/onlinedocs/cpp/Initial-processing.html
– qrdl
18. November 2009 um 8:23 Uhr
@qrdl: Mein Fehler, du hast Recht mit dem zweiten. Die Zeilenfortsetzung erfolgt immer durch den Präprozessor. Manchmal muss ich daran erinnert werden, dass ich es bin nicht ein Besserwisser 😉 Ich denke aber immer noch, dass der Compiler im Normalfall String-Literale zusammenfügt.
Sie können Variationen zum Thema hinzufügen. Die Idee ist, dass die printf() Conversion-Spezifizierer und die entsprechenden Variablen sind alle “nicely” (für einige Werte von “nicely”) aufgereiht.
Nichts Funktionales hier, aber eine neuartige Idee, die ich noch nie zuvor gesehen habe. Gefällt mir, toller Kommentar @pmg!
– rpj
19. November 2009 um 3:07 Uhr
Der De-facto-Standard zum Aufteilen komplexer Funktionen in C ist pro Argument:
Sie sollten die Zeichenfolge nicht aufteilen oder verwenden \ eine C-Linie zu brechen. Solcher Code wird schnell völlig unlesbar/nicht mehr wartbar.
antoine mabula
Ich denke nicht, dass man einen benutzt printf Die Anweisung zum Drucken von Zeichenfolgenliteralen wie oben gezeigt ist eine gute Programmierpraxis. Stattdessen kann man den folgenden Code verwenden:
Es wurden einige gute Vorschläge gemacht, aber keiner von ihnen ist möglicherweise so klar oder wartbar wie nur vier separate Aufrufe von printf().
– Clifford
17. November 2009 um 23:45 Uhr
@Clifford: dann könntest du C++ schreiben, damit cout für dich besser aussieht.
– Prüfen
18. November 2009 um 7:17 Uhr