logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

pliki nagłówkowe, definicja typu strukturalnego i enum

angor101 14 Sie 2017 13:42 1347 5
  • #1 16641664
    angor101
    Poziom 2  
    Witam wszystkich
    1)
    Mam pytanie o miejsce umieszczenia definicji nowego typu strukturalnego
    przykład poniżej
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Zmienna nastawy ma być dostępna w kilku plikach projektu.
    Moje pytanie
    gdzie powinienem umieścić definicję typu struct czas
    czy w pliku nagłówkowym.h?
    czy w pliku z kodem.c?

    2)
    Drugie pytanie jest podobne, dotyczy zmiennej enum
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Chciałbym aby symbole zdefiniowane w zmiennej nazwyT dostępne były w różnych plikach.
    Pytanie
    Gdzie powinienem umieścić definicje zmiennej enum nazwyT
    czy w pliku nagłówkowym.h?
    czy w pliku z kodem.c?

    Pozdrawiam Wszystkich
    i proszę o odpowieć na pytania

    an.gor
  • #2 16641712
    JacekCz
    Poziom 42  
    W nagłówku taki trick:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    w wybranym module *.C, nazwijmy go główny, robisz tak

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Nie wymyśliłem tricku na inicjację, ale tak używam zmiennych globalnych od wielu lat

    EDIT

    Oczywiście się da
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    ale to już nie jest takie 'eleganckie', choć w pełni OK. Mozna by wymyślać jakieś makro (niepotrzebny hardkor) itd...

    drugi sposób to już 'obiektowo', w strukturze dać inline konstruktor (może to nie być adekwatne do projektu, ale ok jeśli jest tylko jedna instancja tej klasy o sensie "konfiguracja"), w rzeczywistości kod konstruktora zostanie wygenerowany przy głównej jednostce kompilacji
  • #3 16641747
    grko
    Poziom 33  
    @JacekCz Ten trick to bardzo słabe rozwiązanie. Nie lepiej po prostu w jednym pliku C zdefiniować instancję struktury oraz w jednym nagłówku zrobić extern tej instancji? Bo tego typu "preprocesorowy trick" ani to wygląda dobrze ani nie ma żadnej wartości dodanej. Pomijam już to, że podwójne podkreślenie w definicji jest zarezerwowane dla kompilatora...

    @angor101
    1. Moim zdaniem definicję powinieneś dać w implementacji (plik C) a deklarację (z extern) w nagłówku. Nazwa instancji powinna być w miarę unikalna bo symbol jest widoczny globalnie.

    2. W pliku nagłówkowym
  • #4 16641758
    JacekCz
    Poziom 42  
    1. w tej chwili nie skomentuję, wielu się to podobało, choćby występuje RAZ (nowsze paradygmaty bardzo to doceniają) i nie da się pomylić w refactoringu typu

    grko napisał:
    Nazwa instancji powinna być w miarę unikalna bo symbol jest widoczny globalnie.




    Z tym bym się zgodził "oboma ręcami". Faktem jest, że "szkolne" C w ogóle tego nie uczy,
    A zachowanie C "o ile nie napiszę 'static' to jest globalne" jest z tych krytykowanych.
    <ciach>

    Moderowany przez dondu:

    Kolega dobrze wie, że nie tolerujemy wulgaryzmów w żadnej formie.
    Dodatkowo kolega obraża innych użytkowników forum.
    Blokada pisania na 14 dni.
    3.1.6. Rozpowszechnianie treści sprzecznych z zasadami współżycia społecznego oraz dobrymi obyczajami.
    3.1.9. Nie ironizuj i nie bądź złośliwy w stosunku do drugiej strony dyskusji. Uszanuj odmienne zdanie oraz inne opinie na forum.

  • #5 16641780
    grko
    Poziom 33  
    JacekCz napisał:
    1. w tej chwili nie skomentuję, wielu się to podobało, choćby występuje RAZ (nowsze paradygmaty bardzo to doceniają) i nie da się pomylić w refactoringu typu.


    Bardzo chętnie posłucham jakie są zalety tego co pokazałeś bo narazie nie widzę żadnych w stosunku do definicji z inicjalizacją struktury w pliku *.c oraz deklaracją z extern w pliku *.h. Ale może jestem staroświecki i nie znam nowszych paradygmatów programowania. Tylko proszę napisz to w osobnym poście a nie edytuj poprzedniego bo dyskusja wygląda co najmniej dziwnie wtedy.

    PS: Chyba nie dostanę odpowiedzi na to bo koledze ktoś zablokował pisanie. Zresztą słusznie.
  • #6 16649421
    angor101
    Poziom 2  
    Dzięki wszystkim za wyjaśnienia i pomoc.
    Pozdrawiam.
    angor101
REKLAMA