Tengo la siguiente declaración:
printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize);
Quiero romperlo. Intenté lo siguiente pero no funciona.
printf("name: %s\t
args: %s\t
value %d\t
arraysize %d\n",
sp->name,
sp->args,
sp->value,
sp->arraysize);
¿Cómo puedo romperlo?
Respuestas:
Si desea dividir un literal de cadena en varias líneas, puede concatenar varias cadenas juntas, una en cada línea, así:
printf("name: %s\t" "args: %s\t" "value %d\t" "arraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize);
fuente
El compilador de C puede pegar cadenas literales adyacentes en una, como
printf("foo: %s " "bar: %d", foo, bar);
El preprocesador puede usar una barra invertida como último carácter de la línea, sin contar CR (o CR / LF, si es de Windowsland):
printf("foo %s \ bar: %d", foo, bar);
fuente
Solo algunas otras opciones de formato:
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);
Puede agregar variaciones sobre el tema. La idea es que los especialistas de
printf()
conversión y las variables respectivas estén alineados "bien" (para algunos valores de "bien").fuente
La forma estándar de facto de dividir funciones complejas en C es por argumento:
printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize);
O si quieres:
const char format_str[] = "name: %s\targs: %s\tvalue %d\tarraysize %d\n"; ... printf(format_str, sp->name, sp->args, sp->value, sp->arraysize);
No debes dividir la cadena, ni debes usar
\
para romper una línea C. Dicho código rápidamente se vuelve completamente ilegible / inmantenible.fuente
No creo que usar una
printf
declaración para imprimir cadenas literales como se ve arriba sea una buena práctica de programación; más bien, uno puede usar el fragmento de código a continuación:printf("name: %s\t",sp->name); printf("args: %s\t",sp->args); printf("value: %s\t",sp->value); printf("arraysize: %s\t",sp->name);
fuente