Re: Jak správně rozdělit C++ projekt
Pavel Brychta
pavel.brychta na duhasys.eu
Úterý Srpen 24 06:49:18 CEST 2021
DD,
přidám taky svoji trošku do mlýna:
Hlavičkové soubory s obsahem C++ pojmenovávám .hpp. Pokud je v hlavičce
v objektu nějaká metoda, která je jen setter/getter, napíšu ji rovnou v
hlavičce. To stejné platí o konstruktoru, který jen nastavuje lokální
proměnné, nebo volá konstruktor/y předka. V každém případě se snažím
dokumentaci psát v doxygen stylu také v hlavičkovém souboru. Tohle má
dva důvody: první je ten, že pokud někomu někdy dáte přeložený modul
jako knihovnu, tak má dokumentaci v hlavičkovém souboru, který musí
dostat kvůli volání. Druhý je ten, že našeptávače (třeba ve VSC) dokážou
napovídat právě z doxygen struktury a to včetně parametrů, takže se mi
pohodlněji píše. Nezapomeňte používat #pragma once, nebo klasickou C
ifndef konstrukci pro zamezení vícenásobného include. Co se týče
globálních proměnných - pokud je objekt singleton, nebo se používá jen
jedna globální instance, tak ji vytvářím rovnou v knihovně, která ten
objekt definuje. Globální odkaz je pak v odpovídající hlavičce. Co se
týče #define - tady to používám malinko jinak. Pokud vím, že projekt
bude překládaný pouze pro jeden hardware/platformu, tak define jdou do
config.h/hpp. Pokud ale počítám s tím, že bude v PIO víc environmentů
(typicky ESP8266/ESP32), jde to define do build_flags do odpovídající
sekce v platformio.ini (ono to je někdy stejně nutnost, protože to je
jediná možnost, jak konfigurovat volitelné parametry knihoven třetích
stran - typický příklad je třeba TEMPLATE_PLACEHOLDER knihovny
ESPAsyncWebServer). Co se týče logiky rozdělení do více souborů - snažím
se držet logicky sounáležící celky pohromadě, ale citlivě tak, aby se
nestaly nepřehlednými (ano, občas to tím pádem musím předělat, pokud
jsem to dostatečně nepromyslel dopředu). V PIO je pak umístím do
jednotlivých adresářů do podadresáře lib/ . Většinou pak stejně z
takového kódu vznikne samostatný git repozitář, který v projektu použiju
jako git submodul. Přímo v projektu se snažím držet pouze aplikační
logiku, o které předpokládám, že nebude možné opakované použití.
P.B.
Dne 23. 08. 21 v 15:47 Petr Zapadlo napsal(a):
> Zdravím,
>
> nějak se nemůžu domluvit s rozdělením původního jedno velkého souboru
> na menší. Mějme jeden soubor main.cpp který má následující strukturu:
>
>
> část #include
>
> část #define (piny a podobně)
>
> část deklarace funkcí
>
> část vytvoření instancí tříd
>
> část definice globálních proměnných
>
> funkce setup
>
> funkce loop
>
> definice funkcí.
>
> A pro zlepšení orientace a čitelnosti bych rozdělit nějak takto po
> souborech:
>
> globální proměnné, instance tříd a #define
>
> setup a loop
>
> definice funkci
>
> Jaký to má správný postup, buď mu někde něco chybí a nebo si naopak
> stěžuje, že je daná proměnná redefinována
>
>
> Díky
>
> Petr
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list