Безопасно ли передавать указатели на функции и сравнивать их так же, как указатели на обычные объекты?
Вот в чем дело, у меня есть несколько функций,
void foo() {}
void bar() {}
И я хочу передать эти функции, как указатели обычных объектов,
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")
}
Могу ли я использовать эти указатели на функции таким образом? И я написал программу для проверки, похоже, хорошо. Кроме того, я думаю, что не как обычные предметы, которые могут лежать вstack
или жеheap
функции находятся вtext segment
(верно?), поэтому, когда я имею в видуfoo
, это дает мне физический адрес, на котором функцияfoo
лежит в текстовом сегменте?
СЛЕДОВАТЬ ЗА
Если я действительно работаю с DLL, рассмотрим это: во-первых, функция ptrfptr
назначена функция,
ReturnType (*fptr)(ArgType) = beautiful_func;
Два сценария здесь,
1) если beautiful_func отсутствует в DLL, то это безопасно использоватьfptr
.
2) если он в DLL, то позже, я думаю, было бы небезопасно использоватьfptr
потому что теперь он может относиться к совершенно другой функции, которая неfptr
был рожден для, верно?