Arduino - platnost #define

Jan Waclawek konfera na efton.sk
Středa Květen 6 21:16:11 CEST 2020


[preposielam]

Ahojte,

po precitani si doteraz vsetkych prispevkov vo vlakne si myslim, ze
pani programatori Waclawek, Zuffa a p.Mraz napisali k teme snad uz
uplne vsetko, ale napriek tomu vsetkemu by som si dovolil este pridat
dve poznamky, ktore mne osobne velmi pomohli v praxi pochopit tento
problem s platnostou #define.

Najprv by som rad chcel zareagovat na tuto pasaz:

...pouzit puvodni M5stack knihovny...

Tuna je dolezite si uvedomit to slovicko "knihovny". Zvycajne su to
subory s priponou .lib a su to vacsinou binarne object file s
predkompilovanymi rutinami, ktore maju svoj specificky format kvoli
rychlemu linkovaniu do vysledneho kodu. Tieto rutiny maju svoje
nazvy-adresy a svoje parametre. Na to, aby ste ich mohol pouzivat v .c
suboroch potrebujete nejako povedat prekladacu ich formalny nazov a
jednotlive parametre rutin. Na toto sluzi .h file s prislusnymi
#define konstanami pre jednotlive rutiny. Tieto #define platia len pre
tuto konkretnu rutinu z .lib file. Kedze nemate ale .c zdrojaky od
jednotlivych rutin v .lib subore neviete zmodifikovat prislusnu
rutinu. Tato operacia totiz vyzaduje novu kompilaciu rutiny do object
filu a nasledne ulozenie do kniznice, teda .lib-suboru.

Druha poznamka teraz ku platnosti #define, sa tyka oblasti platnosti v
.h a .c objektoch. Zamerne som pouzil slovicko "objekt" z objektoveho
programovania napr. C++, pretoze tuna najlepsie vidiet ako vlastne
cele to objektove programovanie vyzera na urovni asembleru (alebo
cisteho c-cka), kde teda klucove slovicka public a extern jasne
hovoria co sa da pouzivat v dalsich objektoch resp. programovych
moduloch. Prislusne #define plati vzdy len v definovanom objekte, teda
.c subore. Tieto jednotlive objekty (teda .c subory) potom mozete
pouzit v main.c subore alebo objekte, ale zase musite ich
naincludovat. Mne osobne tato objektova predstava na urovni asembleru
velmi ulahcila predstavu a pochopenie direktiv #include a #define v
c-cku. Ked som to nechapal z c-cka, tak som to pochopil na asembleri z
c++.  :)))

A.



Další informace o konferenci Hw-list