Mam następujące oświadczenie:
printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize);
Chcę to zerwać. Próbowałem wykonać następujące czynności, ale to nie działa.
printf("name: %s\t
args: %s\t
value %d\t
arraysize %d\n",
sp->name,
sp->args,
sp->value,
sp->arraysize);
Jak mogę to rozbić?
Odpowiedzi:
Jeśli chcesz podzielić literał ciągu na wiele wierszy, możesz połączyć wiele ciągów razem, po jednym w każdym wierszu, na przykład:
printf("name: %s\t" "args: %s\t" "value %d\t" "arraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize);
źródło
Kompilator C może skleić sąsiednie literały ciągów w jeden, na przykład
printf("foo: %s " "bar: %d", foo, bar);
Preprocesor może użyć odwrotnego ukośnika jako ostatniego znaku linii, nie licząc CR (lub CR / LF, jeśli jesteś z Windowsland):
printf("foo %s \ bar: %d", foo, bar);
źródło
Tylko kilka innych opcji formatowania:
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);
Możesz dodać warianty motywu. Chodzi o to, że
printf()
speficiers konwersji i odpowiednie zmienne są wszystkie ustawione w jednej linii „ładnie” (dla niektórych wartości „ładnie”).źródło
De facto standardowy sposób dzielenia złożonych funkcji w C jest na argument:
printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize);
Lub jeśli chcesz:
const char format_str[] = "name: %s\targs: %s\tvalue %d\tarraysize %d\n"; ... printf(format_str, sp->name, sp->args, sp->value, sp->arraysize);
Nie powinieneś rozdzielać łańcucha ani używać go
\
do łamania linii C. Taki kod szybko staje się całkowicie nieczytelny / nie do utrzymania.źródło
Nie sądzę, aby użycie jednej
printf
instrukcji do wydrukowania literałów łańcuchowych, jak widać powyżej, jest dobrą praktyką programistyczną; można raczej użyć fragmentu kodu poniżej:printf("name: %s\t",sp->name); printf("args: %s\t",sp->args); printf("value: %s\t",sp->value); printf("arraysize: %s\t",sp->name);
źródło