В 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);

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

Ответ 1

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

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

Ответ 2

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

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() и соответствующие переменные выстраиваются "красиво" (для некоторых значений "красиво" ).

Ответ 3

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

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

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

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

Ответ 4

Я не думаю, что использование одного выражения printf для печати строковых литералов, как показано выше, является хорошей практикой программирования; скорее, можно использовать фрагмент кода ниже:

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

Ответ 5

Де-факто стандартный способ разделения сложных функций в C на аргумент:

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

Или, если вы:

const char format_str[] = "name: %s\targs: %s\tvalue %d\tarraysize %d\n";
...
printf(format_str, 
       sp->name, 
       sp->args, 
       sp->value, 
       sp->arraysize);

Вы не должны разделять строку, и вы не должны использовать \ для разрыва строки C. Такой код быстро превращается в полностью нечитаемый/недостижимый.