Innymi słowy, parametry funkcji main
(choć niby bez nich kompiluje się bez ostrzeżeń); deklaracja int i
wewnątrz pętli, bo nie jest używana poza nią, po co marnować miejsce;
Należałoby jeszcze oznaczyć argumenty argc
i argv
jako nieużywane, ale po co, skoro standard na okoliczność braku obsługi parametrów przewiduje int main(void) { /* ... */ }
?
zaleca się stosować stałą EXIT_SUCCESS
zamiast 0
,
+1, chociaż trochę rozwlekle.
Ewentualnie EX_OK z <sysexists.h>
czy to ze względu na nieużywanie stałych wpisanych na sztywno (czytelność),
+1
czy na to, że teoretycznie kod może być kompilowany na systemie, w którym jest inna konwencja.
+1, chociaż tego bym się w praktyce nie spodziewał.
Natomiast ++i
zamiast i++
, które ktoś wspominał wyżej, to fanaberia, obie formy dają ten sam kod wynikowy (gcc 8.3.0).
+1
Może ewentualnie %d
zamiast %i
, jako forma powszechniejsza.
ymmv, ja się najczęściej spotykam z %i
przyjmuje się, że zmienne lokalne powinny być deklarowane na początku funkcji (nie w wewnętrznych blokach, nie w for, itd.) - chyba, że stopień skomplikowania funkcji tego wymaga.
A dlaczego tak, jeśli można się spytać? Nie programuję w C zawodowo, ale dobre praktyki znane z innych języków mówią coś innego.
Tak się utarło, jednak często pojawiającym się argumentem jest że deklaracje zmiennych nie były porozrzucane po całej funkcji i od razu widać, na czym dana funkcja operuje, a jak zmiennych więcej jest niż kilka, to znaczy, że funkcja jest zbyt skomplikowana i należy ją podzielić - dla mnie jest to dobry argument.
Nie bez znaczenia pewnie jest fakt, że C to dość stary język, a w dawnych czasach interakcja z komputerami odbywała się między innymi za pomocą dalekopisów - raz deklarując wielokrotnie zmienną na początku można było zaoszczędzić trochę papieru i czasu, bo jedną z typowych prędkości transmisji było 300 bitów na sekundę, czyli po uwzględnieniu standardowego framingu jakieś 30 znaków na sekundę - a minimalną prędkością, którą obsługiwał Unix było chyba 50 bitów na sekundę, czyli 5 znaków na sekundę :)
Powrót karetki też swoje trwał, bo głowica musiała fizycznie wrócić na początek linii, więc trzeba było dodawać sztuczne opóźnienia, wysunięcie linii tak samo.
Później pojawiły się terminale CRT, one komunikowały się np. z szałową prędkością 1200 bitów na sekundę, a lokalne terminale 9600 lub nawet 19200 bitów na sekundę :)
Mogła być to więc taka prymitywna zasadą DRY, jeżeli np. w różnych blokach potrzebujemy int i
lub czegoś w stylu struct buf *bp
:)