Czytam książkę o programowaniu C "Zaawansowane programowanie w środowisku Unix" oraz w "UNIX Standaryzacji i Wdrożeń" rozdział pokazuje program, który drukuje wartości dla symboli w sysconf i pathconf, kod w ten program ma kilka linii, które wygląda następująco:Zdefiniowane stałe jako argument formatu printf, dlaczego dodano "+ 0"?
#ifdef ARG_MAX
printf ("ARG_MAX defined to be %ld\n", (long) ARG_MAX + 0);
#else
printf ("no symbol for ARG_MAX\n");
#endif
Ilekroć zdefiniowana stała jest używana jako argument za printf
to zawsze następuje + 0
, nie wydaje się robić nic, bo starałem się go usunąć i nic się nie stało. Jaki jest sens dodawania zera?
mogę myśleć o dwóch ogólnych zastosowań coś takiego, ale nie wydaje się być przydatna tutaj: 1) do wywoływania integralnej promocji, i 2) do tworzenia wartości wyrażenia (nie jest to l-wartość). –
Mogę wymyślić inny: Jeśli masz '#define ARG_MAX', rozwija się do' (long) + 0' (tj. '0L'). Nie wiem, jak to by było możliwe (lub dlaczego chciałbyś go zaspokoić). – melpomene
Które wydanie tej książki czytasz?Pierwotnie został napisany w 1992 roku, kiedy wiele aspektów C, Unix i POSIX było słabo zdefiniowanych lub słabo przestrzeganych. To pewnie ochrona przed jakąś dziwną implementacją, ale nie potrafię sobie wyobrazić. – Schwern