How to split a string literal across multiple lines in C / Objective-C? How to split a string literal across multiple lines in C / Objective-C? c c

How to split a string literal across multiple lines in C / Objective-C?


There are two ways to split strings over multiple lines:

Using \

All lines in C can be split into multiple lines using \.

Plain C:

char *my_string = "Line 1 \                   Line 2";

Objective-C:

NSString *my_string = @"Line1 \                        Line2";

Better approach

There's a better approach that works just for strings.

Plain C:

char *my_string = "Line 1 "                  "Line 2";

Objective-C:

NSString *my_string = @"Line1 "                       "Line2";    // the second @ is optional

The second approach is better, because there isn't a lot of whitespace included. For a SQL query however, both are possible.

NOTE: With a #define, you have to add an extra '\' to concatenate the two strings:

Plain C:

#define kMyString "Line 1"\                  "Line 2"


There's a trick you can do with the pre-processor.
It has the potential down sides that it will collapse white-space, and could be confusing for people reading the code.
But, it has the up side that you don't need to escape quote characters inside it.

#define QUOTE(...) #__VA_ARGS__const char *sql_query = QUOTE(    SELECT word_id    FROM table1, table2    WHERE table2.word_id = table1.word_id    ORDER BY table1.word ASC);

the preprocessor turns this into:

const char *sql_query = "SELECT word_id FROM table1, table2 WHERE table2.word_id = table1.word_id ORDER BY table1.word ASC";

I've used this trick when I was writing some unit tests that had large literal strings containing JSON. It meant that I didn't have to escape every quote character \".


You could also go into XCode -> Preferences, select the Indentation tab, and turn on Line Wrapping.

That way, you won't have to type anything extra, and it will work for the stuff you already wrote. :-)

One annoying thing though is...

if (you're long on indentation    && short on windows) {            then your code will                end up squished                     against th                         e side                             li                              k                              e                              t                              h                              i                              s}