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