Przy pomocy preprocesora możesz pisać tzw. makra. Tłumaczę (a przynajmniej się postaram) na przykładzie:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W tych linijkach określasz, gdzie podłączasz diodę LED do procesora.
Tutaj wybierasz sobie zarówno port jak i pin, do którego podłączysz. Ale kompilator nie zna takich określeń, potrzebuje wprost: "dioda podłączona pod pin PC8". Żeby ustawić ten pin jako WYJŚCIE, musisz wywołać:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Więc jak to zrobić? Myślisz sobie: "wystarczy, jeśli przygotuję sobie makro:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i wywołam na początku funkcji main() jako
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
No więc teraz, dlaczego tak nie będzie. Zacznijmy od podstawowych podstaw preprocesora:
1) Dyrektywa #define działa w ten sposób, że w kodzie programu wyszukiwany jest ciąg znaków, który jest pierwszym wyrazem po #define, a następnie jest zastąpiony tym, co jest jako drugi wyraz.
2) wyrażenie
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
działa w ten sposób, że to, co jest w nawiasie (w tym przypadku x, ale możesz tu sobie to dowolnie oznaczyć, uwaga
jednym wyrazem) jest podstawiane do wyrażenia, które jest jako drugi wyraz, a następnie wykonywane są obliczenia (jak w tym przykładzie), albo inne czynności, zależy, co wpiszesz.
3) symbol "##" to tzw. symbol sklejania. Łączy ze sobą w jeden ciąg to, co jest przed tym symbolem, i to, co jest za tym symbolem.
No dobrze, ale jak się to ma do opisanego problemu, zapytasz? Już tłumaczę:
Jeżeli wpiszesz tylko:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to makro rozwinie to do:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A teraz, jak powinno być:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
To są dwa makra, które rozwiązują problem. Wywołujesz to samo, czyli
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Teraz rozpiszę tylko, jak zadziała część
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Najpierw wykona się pierwsze makro, czyli
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W wyniku tego działania do makra z SDDR zostanie jako argument przekazane rozwinięcie makra LED_PORT. Czyli to drugie makro wywoła się jako:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ponieważ wiemy, że symbol "##" oznacza sklejenie dwóch ciągów w jeden, więc w miejscu wywołania
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
pojawi się wynik działania drugiego makra, czyli
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Mam nadzieję, że się rozjaśni. Prościej tego nie potrafię wytłumaczyć