В 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. Такой код быстро превращается в полностью нечитаемый/недостижимый.