turbo sprintf c printf

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").