czy bezpieczne jest przekazywanie wskaźników funkcji i porównywanie ich tak, jak normalnych wskaźników obiektów?

Oto rzecz, mam kilka funkcji,

void foo() {}
void bar() {}

I chcę przekazać te funkcje tak, jak wskaźniki zwykłych obiektów,

int main()
{
    void (*fptr1)() = foo;
    void (*fptr2)() = fptr1;
    void (*fptr3)() = bar;

    if (fptr1 == foo)
        printf("foo function\n");
    if (fptr2 == foo)
        printf("foo function\n");
    if (fptr3 == foo)
        printf("foo function\n")
}

Czy mogę używać tych wskaźników funkcji w ten sposób? Napisałem program, aby go przetestować, wydaje się, że jest w porządku. Ponadto myślę, że nie jak zwykłe przedmioty, które mogą się w nim znajdowaćstack lubheap, funkcje znajdują się wtext segment (prawda?), więc kiedy się odwołujęfoo, czy daje mi fizyczny adres przy której funkcjifoo leży w segmencie tekstu?

ZAGRYŹĆ

Jeśli rzeczywiście pracuję z biblioteką DLL, rozważ to: najpierw funkcję ptrfptr przypisana jest funkcja,

ReturnType (*fptr)(ArgType) = beautiful_func;

Dwa scenariusze tutaj

1) jeśli beautiful_func nie jest w DLL, można bezpiecznie z niego korzystaćfptr.

2) jeśli jest w bibliotece DLL, to później myślę, że byłoby niebezpiecznefptr, ponieważ teraz może odnosić się do zupełnie innej funkcji, która nie jestfptr urodził się dla, prawda?

questionAnswers(4)

yourAnswerToTheQuestion