sprintf - En C, ¿se puede dividir una declaración printf larga en varias líneas?
sprintf c (5)
El compilador de C puede pegar literales de cadena adyacentes en uno, como
printf("foo: %s "
"bar: %d", foo, bar);
El preprocesador puede usar una barra inversa como último carácter de la línea, sin contar CR (o CR / LF, si eres de Windowsland):
printf("foo %s /
bar: %d", foo, bar);
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?
La forma estándar de facto para 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 lo desea:
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 debe dividir la cadena, ni debe usar /
para romper una línea C. Tal código rápidamente se vuelve completamente ilegible / no se puede mantener.
No creo que el uso de una declaración printf
para imprimir literales de cadena como se ve arriba sea una buena práctica de programación; más bien, uno puede usar la pieza 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);
Si desea dividir un literal de cadena en varias líneas, puede concatenar varias cadenas juntas, una en cada línea, de esta manera:
printf("name: %s/t"
"args: %s/t"
"value %d/t"
"arraysize %d/n",
sp->name,
sp->args,
sp->value,
sp->arraysize);
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 printf()
conversión printf()
y las respectivas variables estén alineados "muy bien" (para algunos valores de "muy bien").