Ist es sicher, Funktionszeiger weiterzugeben und sie wie die Zeiger normaler Objekte zu vergleichen?

Hier ist die Sache, ich habe mehrere Funktionen,

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

Und ich möchte diese Funktionen wie die Zeiger gewöhnlicher Objekte weitergeben,

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

Kann ich diese Funktionszeiger auf diese Weise verwenden? Und ich habe ein Programm geschrieben, um es zu testen, scheint in Ordnung zu sein. Darüber hinaus denke ich, nicht wie gewöhnliche Objekte, die in liegen könnenstack oderheapFunktionen befinden sich intext segment (richtig?), also wenn ich mich beziehefoo, gibt es mir die physikalische adresse bei welcher funktionfoo liegt im Textsegment?

NACHVERFOLGEN

Wenn ich tatsächlich mit DLL arbeite, bedenke dies: Zuerst eine Funktion ptrfptr eine Funktion zugewiesen bekommen,

ReturnType (*fptr)(ArgType) = beautiful_func;

Zwei Szenarien hier,

1) Wenn beautiful_func nicht in DLL ist, ist es sicher, dies zu verwendenfptr.

2) Wenn es in DLL ist, dann denke ich später, es wäre unsicher zu verwendenfptr, weil es sich jetzt möglicherweise um eine ganz andere Funktion handelt, die es nicht istfptr wurde geboren für, richtig?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage