Witam :)
Natknąłem się na ciekawy problem, podczas przekazywania do funkcji wartości zmiennej.
Mianowicie:
W funkcji nadrzędnej zmieniam wartość zmiennej lokalnej będącej zmienną statyczną, a przy zajściu pewnego zdarzenia wywołuję w tej funkcji inną funkcję (nazwę ją podrzędną) której przekazuję jako argument wartość zmiennej lokalnej statycznej. Całość wygląda tak:
void FunkcjaNadrzędna(void)
{
static ZmiennaOmawiana = 0;
uint8_t WarunekZwiekszania = 0;
switch(WarunekZwiekszania = JakasFunkcja())
{
case 1:
ZmiennaOmawiana++;
break;
case 2:
ZmiennaOmawiana--;
break;
default:
FunkcjaPodrzedna(ZmiennaOmawiana);
break;
}
}
Tak, poglądowo wygląda ciało funkcji nadrzędnej, natomiast funkcja podrzędna prezentuje się następująco:
void FunkcjaPodrzedna(uint8_t ZmiennaOmawiana)
{
printf("%d\n", ZmiennaOmawiana);
}
Oczywiście mój aktualny program wygląda inaczej, jednak jego działanie i zależności między poszczególnymi funkcjami, ich ciałami i wywołaniami jest dokładnie takie samo, więc mam nadzieję, że to wystarczy.
O co chodzi i w czym problem? ZmiennaOmawiana w funkcji nadrzędnej zachowuje się prawidłowo, widzę podczas debugowania, że zależnie od warunku zmieniania (wiem że można byłoby to zrobić: switch(JakasFunkcja()), ale chcialem pokazać ideę tego co sie dzieje... :P) zmienna ZmiennaOmawiana jest zwiększana, bądź zmniejszania. Jednak problem pojawia się przy wejściu do funkcji podrzędnej... tam wartość tej zmiennej przekazanej jako argument jest zawsze równa 0.
Moje pytanie brzmi:
- Czy prawidłowe jest takie przekazywanie zmiennej do funkcji podrzędnej?
- Dlaczego wartość argumentu zawsze jest równa 0?
Pozdrawiam :)