Безопасно ли передавать указатели на функции и сравнивать их так же, как указатели на обычные объекты?

Вот в чем дело, у меня есть несколько функций,

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 был рожден для, верно?

Ответы на вопрос(4)

Ваш ответ на вопрос