В C может длинный printf оператор быть разбитым в несколько строк?

У меня есть следующее утверждение:

printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize);

Я хочу разбить его. Я попробовал следующее, но это не работает.

printf("name: %s\t
args: %s\t
value %d\t
arraysize %d\n", 
sp->name, 
sp->args, 
sp->value, 
sp->arraysize);

Как я могу разбить его?

79
задан dbush 11 August 2016 в 15:13
поделиться

3 ответа

Если вы хотите разбить строковый литерал на несколько строк, вы можете объединить несколько строк вместе, по одной в каждой строке, например:

printf("name: %s\t"
"args: %s\t"
"value %d\t"
"arraysize %d\n", 
sp->name, 
sp->args, 
sp->value, 
sp->arraysize);
160
ответ дан 24 November 2019 в 10:07
поделиться

Некоторые другие параметры форматирования:

printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", 
        a,        b,        c,        d);

printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", 
              a,        b,        c,            d);

printf("name: %s\t"      "args: %s\t"      "value %d\t"      "arraysize %d\n", 
        very_long_name_a, very_long_name_b, very_long_name_c, very_long_name_d);

Вы можете добавлять вариации темы. Идея состоит в том, что спецификаторы преобразования printf () и соответствующие переменные выстроены «красиво» (для некоторых значений «красиво»).

20
ответ дан 24 November 2019 в 10:07
поделиться

Компилятор C может склеивать смежные строковые литералы в один, например

printf("foo: %s "
       "bar: %d", foo, bar);

. Препроцессор может использовать обратную косую черту в качестве последнего символа строки, не считая CR (или CR / LF, если вы взяты из Windowsland):

printf("foo %s \
bar: %d", foo, bar);
19
ответ дан 24 November 2019 в 10:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: