é 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
ouheap
funçõ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?