[so] [General] Coding Style și Funcții Statice

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Fri Apr 1 10:43:38 EEST 2016


Dorinel Filip <dorinel.filip at gmail.com> writes:
> În data de 31 martie 2016, 22:17, Razvan Deaconescu via so <
> so at cursuri.cs.pub.ro> a scris:
>> Dorinel Filip via so <so at cursuri.cs.pub.ro> writes:
>> > Salutare,
>> >
>> > De multe ori, în C, pentru a evita declarațiile implicite, trebuie să
>> > punem, semnăturile funcțiilor statice la începutul sursei modulului
>> > (exact cum am face într-un fișier header, pentru funcțiile
>> > non-statice).
>>
>> Nu înțeleg "evitarea declarațiilor implicite". Despre ce este vorba?
>>
>> Dacă pui într-un modul funcțiile în ordine, nu ar trebui să ai problema
>> asta.
>
> Într-adevăr, în 99% din cazuri problema poate fi rezolvată prin reodonarea
> funcțiilor, însă mie mi se pare ciudat ca primele câteva zeci/sute de linii
> să fie ocupate de definiții ale funcțiilor helper (care sunt gândite pentru
> a fi folosite de celelalte funcții, deci trebuiesc declarate înaintea
> acestora).

Nu văd nici o problemă să definești funcțiile helper înainte. Mi se pare
perfect natural și așa arată sursele pe care eu le-am urmărit de-a
lungul vremii. Personal găsesc ciudat o listă mare de declarații și apoi
undeva după main definite funcțiile; nu prea am întâlnit situația asta
in real world în programe C.

Iar faptul că la funcții non-statice declarațiile sunt puse într-un
header nu este legat. Declarațiile sunt puse într-un fișier header
pentru ca acel header să fie inclus de modulele care _folosesc_
funcțiile în cauză, nu de cele care _definesc_ funcțiile în cauză.

Dacă ai modul_define_functions.c, header.h și module_use_functions.c,
module_use_functions.c ar trebui să includă
header.h. modul_define_functions.c include header.h doar dacă sunt
tipuri de date și macro-uri de care și acesta are nevoie; altfel nu sunt
necesare. Și în situația asta te-ai lovi de aceeași, chiar dacă
funcțiile pe care acest modul le definește nu sunt statice (ci
exportate).

Pe scurt, nu vă bazați pe prejudecăți și "așa zic eu că se face" atunci
când scrieți cod. Există ceea ce s-ar chema "bun simț" care este modul
cel mai simplist de a face lucrurile; keep it simple.

Răzvan


More information about the so mailing list