В C можно ли разбить длинный оператор printf на несколько строк?
у меня есть следующее заявление:
printf("name: %stargs: %stvalue %dtarraysize %dn", sp->name, sp->args, sp->value, sp->arraysize);
Я хочу разбить его. Я попробовал следующее, но это не работает.
printf("name: %st
args: %st
value %dt
arraysize %dn",
sp->name,
sp->args,
sp->value,
sp->arraysize);
Как я могу его разбить?
5 ответов:
Если вы хотите разбить строковый литерал на несколько строк, вы можете объединить несколько строк, по одной на каждой строке, вот так:
printf("name: %s\t" "args: %s\t" "value %d\t" "arraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize);
просто некоторые другие параметры форматирования:
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()преобразование speficiers и соответствующие переменные все выстроились "красиво" (для некоторых значений "красиво").
компилятор C может склеить соседние строковые литералы в один, например
printf("foo: %s " "bar: %d", foo, bar);препроцессор может использовать обратную косую черту в качестве последнего символа строки, не считая CR (или CR/LF, если вы из Windowsland):
printf("foo %s \ bar: %d", foo, bar);
де-факто стандартный способ разделения сложных функций в 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. Такой код быстро становится совершенно нечитаемым / недостижимым.
Я не думаю, что с помощью одного
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);
Comments