¿es seguro pasar los punteros de función y compararlos al igual que los punteros de un objeto normal?
Aquí está la cosa, tengo varias funciones,
void foo() {}
void bar() {}
Y quiero pasar estas funciones como punteros de objetos comunes,
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")
}
¿Puedo usar estos punteros de función de esta manera? Y escribí un programa para probarlo, me parece bien. Además, pienso, no como objetos ordinarios que pueden estar enstack
oheap
, las funciones residen entext segment
(¿correcto?), entonces cuando me refiero afoo
, ¿me da la dirección física en que función?foo
se encuentra en el segmento de texto?
SEGUIR
Si de hecho trabajo con DLL, considere esto: primero, una función ptrfptr
se le asigna una función,
ReturnType (*fptr)(ArgType) = beautiful_func;
Dos escenarios aquí,
1) Si beautiful_func no está en DLL, entonces es seguro usar estefptr
.
2) si está en DLL, luego, creo que no sería seguro usarfptr
, porque ahora puede referirse a una función totalmente diferente que no esfptr
nació para, ¿verdad?