Anfängerfrage wg. Zeilenumbruchzeichen (Backslash) im Code
-
Hallo
ich habe gerade versucht PeerBlock (C++) mit Visual Studio 2012 zu kompilieren, da hagelte es aber einige Fehler, die ich nicht verstanden hatte.
Ich bin dann drauf gekommen, dass der Backslash, der dort zum Umbrechen längerer Zeilen verwendet wird, offenbar zum Fehler führt.
Ich lese dort z.B. (in der iketypes.h, Zeile 367):#define IKEEXT_ERROR_CODE_COUNT \ (ERROR_IPSEC_IKE_NEG_STATUS_END - ERROR_IPSEC_IKE_NEG_STATUS_BEGIN) typedef struct IKEEXT_IP_VERSION_SPECIFIC_KEYMODULE_STATISTICS0_ {Das gibt dann den Fehler "Syntaxfehler Konstante", der Backslash wird nicht als Umbruchzeichen für die selbe Zeile erkannt.
Ist das vielleicht etwa erst ab VS 2013 bekannt?
Was hat es damit auf sich?
Ich konnte dann natürlich alle Backslashs die für diesen Zeilenumbruch missbraucht wurden, entfernen, dann ging es ja.
Danke für einen kurzen Hinweis an einen ewigen Anfänger

franc
-
\ geht nur in Makros und zieht nur doe folgende Zeile ran.
Also hier nur die Leerzeile nach dem #define. Denke, die muss weg und alles wird gut.
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
volkard schrieb:
\ geht nur in Makros und zieht nur doe folgende Zeile ran.
Auch wenn wir uns sicher alle einig sind, dass es nur in Makros wirklich Sinn macht, finde ich eine bewusste Falschdarstellung nicht gut. Natürlich funktioniert das überall:
#include <ios\ tream> using nam\ espace std; int ma\ in() { // your code goes here retu\ rn 0; }Man sieht, wieso man das bestenfalls in Ausnahmefällen braucht. Ein solch konstruierter Ausnahmefall wäre ein striktes Zeilenlängenlimit in den Codinggstyles in Kombination mit hoher Einrückungstiefe und langen Bezeichnern.
-
Danke. Komisch, dass wenn als Kompilierung die "Vista 64" Variante gewählt wird, gibt es nur diese Probleme, in der "normalen" Kompilierung (ohne "Vista") kompiliert das fehlerfrei durch.
Vielleicht irgendwelche Bedinungen, die an diese Vista64 Kompilierung geknüpft sind, die dann diesen Backslash mit zwei Zeilenumbrüchen nicht mehr akzeptieren?
Keine Ahnung..
Es geht auf jeden Fall, nachdem ich die paar Backslachs alle ganz weg gemacht hatte, die brauchts auch nicht.
-
SeppJ schrieb:
Natürlich funktioniert das überall:
Es funktioniert sogar bei "//"-Kommentaren, das wäre noch eine schöne Demonstration gewesen.
Aber es funktioniert nicht überall:
std::cout << R"(a\ b)";printed
a\ b.
-
forall x in C++ schrieb:
Aber es funktioniert nicht überall:
std::cout << R"(a\ b)";printed
a\ b.
Das ist wirklich mal ein obskures, aber schönes, Gegenbeispiel

-
Auch bemerkenswert:
\u\ 0000Erzeugt undefiniertes Verhalten.
-
Arcoth schrieb:
Auch bemerkenswert:
\u\ 0000Erzeugt undefiniertes Verhalten.
Du meinst, das Programm ist "ill formed"?
-
SeppJ schrieb:
Du meinst, das Programm ist "ill formed"?
Nein. Beachte aber
§3.2.24 schrieb:
Permissible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation or program execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message).
Die Implementierung kann es also als ill-formed behandeln, es aber auch ignorieren. Der Standard schreibt das Verhalten des generierten Programms nicht vor.