Ich habe eine ziemlich lange SQLite-Abfrage:
const char *sql_query = "SELECT statuses.word_id FROM lang1_words, statuses WHERE statuses.word_id = lang1_words.word_id ORDER BY lang1_words.word ASC";
Wie kann ich es in mehrere Zeilen aufteilen, um das Lesen zu erleichtern? Wenn ich folgendes mache:
const char *sql_query = "SELECT word_id
FROM table1, table2
WHERE table2.word_id = table1.word_id
ORDER BY table1.word ASC";
Ich erhalte eine Fehlermeldung.
Gibt es eine Möglichkeit, Abfragen in mehreren Zeilen zu schreiben?
c
objective-c
Ilya Suzdalnitski
quelle
quelle
@
?Es gibt einen Trick, den Sie mit dem Vorprozessor machen können.
Es hat die potenziellen Nachteile, dass es den Leerraum kollabiert und für Leute, die den Code lesen, verwirrend sein kann.
Aber es hat den Vorteil, dass Sie sich nicht den Anführungszeichen entziehen müssen.
Der Präprozessor verwandelt dies in:
Ich habe diesen Trick verwendet, als ich einige Komponententests geschrieben habe, die große Literalzeichenfolgen mit JSON enthielten. Es bedeutete, dass ich nicht jedem Anführungszeichen entkommen musste.
quelle
Sie können auch zu XCode -> Einstellungen gehen, die Registerkarte Einrückung auswählen und Zeilenumbruch aktivieren.
Auf diese Weise müssen Sie nichts extra eingeben, und es funktioniert für die Dinge, die Sie bereits geschrieben haben. :-)
Eine nervige Sache ist jedoch ...
quelle
Ich habe die ganze Zeit dieses Problem, deshalb habe ich ein kleines Tool erstellt, um Text in eine maskierte mehrzeilige Objective-C-Zeichenfolge zu konvertieren:
http://multilineobjc.herokuapp.com/
Hoffe das spart dir etwas Zeit.
quelle
Erweiterung der Angebotsidee für Objective-C:
quelle
#define NSStringMultiline(...) @#__VA_ARGS__
sollte auch funktionieren.#define NSStringMultiline(...) [[NSMutableString alloc] initWithCString:#__VA_ARGS__ encoding:NSUTF8StringEncoding]
#define NSStringMultiline(...) [@#__VA_ARGS__ mutableCopy]
funktioniert auch für veränderbare Strings.Eine weitere Lösung für den Stapel: Ändern Sie Ihre .m-Datei in .mm, sodass sie zu Objective-C ++ wird, und verwenden Sie C ++ - Rohliterale wie folgt:
Rohe Literale ignorieren alles bis zur Beendigungssequenz, die im Standardfall in Klammern steht.
Wenn die Klammer-Anführungszeichen-Sequenz irgendwo in der Zeichenfolge erscheinen muss, können Sie auch einfach ein benutzerdefiniertes Trennzeichen angeben, wie folgt:
quelle
Sie können auch:
quelle
GCC fügt C ++ - mehrzeilige Raw-String-Literale als C-Erweiterung hinzu
C ++ 11 verfügt über Raw-String-Literale, wie unter https://stackoverflow.com/a/44337236/895245 beschrieben
GCC fügt sie jedoch auch als C-Erweiterung hinzu, die Sie nur
-std=gnu99
anstelle von verwenden müssen-std=c99
. Z.B:Haupt c
Kompilieren und ausführen:
Dies kann zum Beispiel verwendet werden, um mehrzeilige Inline-Assembly in C-Code einzufügen: Wie schreibe ich mehrzeiligen Inline-Assembly-Code in GCC C ++?
Jetzt müssen Sie sich nur noch zurücklehnen und warten, bis es auf C20XY standardisiert ist.
C ++ wurde gefragt bei: C ++ Multiline String Literal
Getestet unter Ubuntu 16.04, GCC 6.4.0, binutils 2.26.1.
quelle
Eine Alternative besteht darin, ein beliebiges Werkzeug zum Entfernen von Zeilenumbrüchen zu verwenden. Schreiben Sie Ihre Zeichenfolge mit einem beliebigen Texteditor . Wenn Sie fertig sind, fügen Sie Ihren Text hier ein und kopieren Sie ihn erneut in xcode.
quelle