Zgred napisał(a):
Pytanie moje jest takie po co ta figura? co nam daje? czy przed czymś chroni, czy coś zabezpiecza? i czy nie można by tego załatwić inaczej? jak rozumiem nie jest to jedyny sposób przesyłania argumentów do funkcji.
Tzn wybacz, mi jeśli źle zrozumiałem pytanie i nie odpowiem ściśle na temat, ale w razie czego dopytaj jeszcze ok? Ja powiem szczerze, że bardzo się cieszę, że takie pytania padają. Kurczę a wiem przecież jak wiele osób hmmm "obawia" się je zadawać na forum - nie wiem czemu - ja bym od razu pytał - tak jak ty tutaj
otóż mamy sobie funkcję
USART_Init( uint16_t baud );
w zasadzie, jeśli używamy TYLKO jednej prędkości RS232 w projekcie to można się zgodzić, że zupełnie bezużyteczne jest w ogóle pisanie funkcji z argumentem. No bo po co on ? skoro i tak wyliczamy go jako stałą w pliku *.h jak słusznie zauważyłeś. Toż można by ją napisać tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
prawda ? proszę bardzo argument zniknął i __UBRR wykorzystaliśmy w środku. I oczywiście tak można spokojnie pisać. Ale ja hmmm zwykle piszę tak jak pokazałem to w książce z uwagi na fakt, że czasem choć rzadko potrzebuję w trakcie programu (w trakcie jego działania) dynamicznie (w locie) zmienić prędkość RS232...... Więc jak mam tego dokonać mają taką funkcję jak wyżej hmmm?
i dlatego piszę ją w takiej postaci żebym mógł w razie czego jednak w locie zmienić sobie tę prędkość wygodnie, bo np utworzę sobie kilka takich definicji:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
a później w kodzie programu w jego różnych miejscach, gdy nagle potrzebuję zmienić prędkość na jedną z tych, które sobie zdefiniowałem to wpisuję:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
albo:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
bo tak jest mi wygodniej i bardziej czytelnie w kodzie dla oka, za każdym razem mogę sobie łatwo wywołać inicjalizację UART'a z inną prędkością. Widzę bowiem w kodzie nazwę funkcji init więc wiem że inicjalizuję UART i na dodatek ładnie widzę argument związany z jedną z predefiniowanych prędkości. Ale przecież nic nie stoi na przeszkodzie aby ją wywołał np z argumentem obliczonym w locie albo odebranym przez UART z jakiegoś innego programu na PC czy innego urządzenia
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
reasumując - nie ma to nic wspólnego z jakimś zabezpieczaniem (a pytasz o to), pewnie, że jest tysiąc różnych sposobów na przekazanie takiego argumentu co pokazałem wyżej (można nawet bez argumentu). Zastanawiasz się też czy jest to jedyny sposób przesyłania argumentów do funkcji - no pewnie, że nie - ale nie za bardzo rozumiem czego dotyczy to pytanie, bo przecież można to przekazać nawet przez wskaźnik
tylko po co w tak prostym przypadku - jednak może się zdarzyć, że np będziesz pobierał wartości argumentów z jakiejś tablicy - wtedy można przez wskaźnik
czy te wyjaśnienia chociaż troszkę pomogły ? jeśli nie to dręcz mnie dalej ...