Witam, chciałbym zadać Wam kilka wścibskich pytań, które nurtują mnie, ale odpowiedzi na nie będą bardzo pomocne i myślę, że rozwieją wątpliwości do podobnych sytuacji. A mianowicie:
- mam takie linijki kodu
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
a później definicje dla preprocka:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Więc pierwsze pytanie brzmi: skąd kompilator wie, że jak piszę przykładowo to SEG_A (1<<0), że chodzi tu o pin w porcie C zamiast np.B, czy A? Czy chodzi tu o to, że napisałem CA1 to (1<<0) więc przypisanie do portu A odpada, a że nie pisałem w ogóle o stanie w porcie B, to PORTB też odpada i pozostaje to C, który to port jest ustawiony na wysoki?
Kolejne pytanie dotyczy przydomka extern:
Jest
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i ten wers jest deklaracją zmiennej globalnej, która znajduje się w pliku tymże d_led.h . Więc teoretycznie (chyba)powinno się, przy dołączeniu tego pliku nagłówkowego do innego pliku, sprawić że każda taka zmienna bez extern i tak zostanie dołączona do innego pliku i "zrozumiana" przez kompilator, a extern sprawia, że te zmienne będą dołączone we wszystkich modułach, które d_led.h dołączą, więc (chyba) niekonieczne jest dołączanie externa.Usunąłem go i kompilator nie pokazywał błędu(ale w praktyce nie sprawdziłem). Więc powinno się użyć w takiej sytuacji externa? Czy błąd wystąpi w praktyce, a w kompilatorze nie?
Kolejny wstęp i pytanie
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Te dyrektywy zapewniają zabezpiecznie przed wielokrotnym dołączeniem tego samego pliku nagłówkowego do innych plików. Z ciekawości też skasowałem te 2 wersy i #endif i dołączyłem d_led.h 2 razy do 2 innych plików. I nic się nie działo. Kompilator nie pokazywał błędu. Więc pytanie: Czy to jest takie zabezpieczenie "na amen" czy symboliczne, czy w praktyce wystąpiłyby błędy?(nie próbowałem w praktyce). Myślę, że to tyle. Liczę na Wasze odpowiedzi.