Mam dość długie zapytanie sqlite:
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";
Jak mogę podzielić go na kilka wierszy, aby ułatwić czytanie? Jeśli wykonam następujące czynności:
const char *sql_query = "SELECT word_id
FROM table1, table2
WHERE table2.word_id = table1.word_id
ORDER BY table1.word ASC";
Pojawia się błąd.
Czy istnieje sposób pisania zapytań w wielu wierszach?
c
objective-c
Ilya Suzdalnitski
źródło
źródło
@
?Jest pewien sposób, który możesz zrobić z preprocesorem.
Ma potencjalnie negatywne strony, że zwinie białe znaki i może być mylące dla osób czytających kod.
Ma jednak tę zaletę, że nie musisz uciec od znaków cudzysłowu.
preprocesor przekształca to w:
Użyłem tej sztuczki, kiedy pisałem kilka testów jednostkowych, które miały duże dosłowne ciągi znaków zawierające JSON. Oznaczało to, że nie musiałem uciekać przed każdym znakiem cytatu \ ".
źródło
Możesz także przejść do XCode -> Preferencje, wybrać kartę Wcięcie i włączyć Zawijanie linii.
W ten sposób nie będziesz musiał pisać nic więcej, a to zadziała dla rzeczy, które już napisałeś. :-)
Jedną z denerwujących rzeczy jest ...
źródło
Cały czas mam ten problem, więc stworzyłem małe narzędzie do konwersji tekstu na wielowierszowy łańcuch C celu:
http://multilineobjc.herokuapp.com/
Mam nadzieję, że zaoszczędzi ci to trochę czasu.
źródło
Rozszerzanie Quote pomysł na Objective-C:
źródło
#define NSStringMultiline(...) @#__VA_ARGS__
też powinien działać.#define NSStringMultiline(...) [[NSMutableString alloc] initWithCString:#__VA_ARGS__ encoding:NSUTF8StringEncoding]
#define NSStringMultiline(...) [@#__VA_ARGS__ mutableCopy]
również działa na zmienne ciągi znaków.Jeszcze jedno rozwiązanie dla stosu, zmień plik .m na .mm, aby stał się Objective-C ++ i użyj surowych literałów C ++, jak poniżej:
Surowe literały ignorują wszystko aż do sekwencji kończącej, która w domyślnym przypadku to nawias-cytat.
Jeśli sekwencja nawias-cudzysłów musi się gdzieś pojawiać w ciągu, możesz łatwo określić niestandardowy separator, na przykład:
źródło
Możesz także:
źródło
GCC dodaje C ++ multiline literały ciągów surowych jako rozszerzenie C.
C ++ 11 ma surowe literały łańcuchowe, jak wspomniano na stronie : https://stackoverflow.com/a/44337236/895245
Jednak GCC dodaje je również jako rozszerzenie C, po prostu musisz użyć
-std=gnu99
zamiast-std=c99
. Na przykład:main.c
Skompiluj i uruchom:
Można tego użyć na przykład do wstawienia wielowierszowego zestawu wbudowanego do kodu C: Jak napisać wielowierszowy kod zestawu wbudowanego w GCC C ++?
Teraz wystarczy się położyć i poczekać, aż zostanie znormalizowany w C20XY.
C ++ został zapytany na: C ++ literał ciągu wieloliniowego
Testowane na Ubuntu 16.04, GCC 6.4.0, binutils 2.26.1.
źródło
Alternatywą jest użycie dowolnego narzędzia do usuwania podziałów linii. Napisz ciąg za pomocą dowolnego edytora tekstu, a po zakończeniu wklej tutaj tekst i skopiuj go ponownie w xcode.
źródło