Wskaźnik na funkcję i volatile

0

Witam,

Deklaruję sobie zmienną globalną:
volatile void(*zmienna)(void)

W jakiejś funkcji chcę sobie ja zmienić i robię tak:

void funkcja(void(*nowa_wartosc)(void))
{
    zmienna = nowa_wartosc;
}

I to wywołuje ostrzeżenie kompilatora:

warning: function return types not compatible due to 'volatile'

Podobnie jak obie wartości chce porównać.

Jak można sie pozbyć ostrzeżenia by wszystko było OK?

0

jestem padniety i moge sie mylic, ale IMHO:

volatile void(zmienna)(void) == zmienna typu "volatile void" () (void)

a ty chcesz miec volatile wskaznik na funkcje, wiec:

void(* volatile zmienna )(void)

lub cos kolo tego. volatile jest "pozycjonowany" tak samo jak const, odnosi sie zawsze do tego co jest 'po lewej' [z wyjatkiem wrednego dozwolonego mylacego zapisu const volatile char zmienna, powinno sie pisac char const volatile zmienna, wtedy nie ma pomylek char const * volatile zmienna -- const jest do czego a volatile do czego? do char czy char*? zawsze do lewej. const mowi o char, a volatile mowi o (charconst)*] wiec po przemysleniu chyba mam racje i to ma byc

void(* volatile zmienna )(void) = volatile * na funkcje [ void(void) ]

ah, a kompilator Ci krzyczy obecnie, ze void != volatile void, wiec wskazywana funkcja NIE ma takiego samego typu jak oczekiwana funckja

1 użytkowników online, w tym zalogowanych: 0, gości: 1