é seguro passar ponteiros de função e compará-los como os ponteiros do objeto normal?

Aqui está a coisa, eu tenho várias funções,

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

E eu quero passar essas funções apenas como ponteiros de objetos comuns,

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")
}

Posso usar esses ponteiros de função dessa maneira? E eu escrevi um programa para testá-lo, parece ok. Além disso, penso eu, não como objetos comuns que podem estar emstack ouheapfunções residem emtext segment (certo?), então quando me refiro afoo, isso me dá o endereço físico em qual funçãofoo encontra-se no segmento de texto?

ACOMPANHAMENTO

Se eu realmente trabalhar com DLL, considere isto: primeiro, uma função ptrfptr é atribuído uma função,

ReturnType (*fptr)(ArgType) = beautiful_func;

Dois cenários aqui

1) Se beautiful_func não está na DLL, então é seguro usar estefptr.

2) se estiver na DLL, mais tarde, acho que seria inseguro usarfptr, porque agora pode se referir a uma função totalmente diferente que não éfptr nasceu para, certo?

questionAnswers(5)

yourAnswerToTheQuestion