Addresse einer Funktion ausgeben



  • Hallo,
    angenommen, ich hab die Funktion void MyFunc(), wie kann ich ausgeben, an welcher Addresse sie sich befindet?

    Ich hab folgendes probiert:

    cout << MyFunc << endl;
    

    und da ich über google gesehen hab, dass es mit Function pointers geht:

    void (*fpPointer)();
    fpPointer = MyFunc;
    cout << *fpPointer << endl;
    

    Egal welche version ich kompiliere, mein Kompiler liefert mir immer die warnung:

    warning: the address of `void MyFunc()', will always evaluate as `true'
    

    Wie mach ich das richtig?



  • Geht das überhaupt? Ich nehme mal an er gibt immer true aus, weil geschaut wird, ob es die Funktion gibt. Und da es sie gibt, true...



  • Du bekommst diese Warnung, weil die einzig brauchbare Überladung des operator<< der ist, der einen bool frisst. Und die Adresse einer Funktion ist niemals der Nullzeiger. Deswegen kommt da immer "true" bzw "1" raus. Das und nur das sagt die Warnung.

    Sofern sizeof(void*)==sizeof(void()()) gilt (das mag nicht unbedingt garantiert sein) könntest Du reinterpret_cast<void const>(&MyFunction) verwenden. Für void* gibt es nämlich einen operator<<, der die Adresse in Hex ausgibt (oder so).



  • Vermutlich geht es mit einem reinterpret_cast:

    std::cout << reinterpret_cast<void*>(f);
    


  • beide vorschläge liefern mir den error

    ISO C++ forbids casting between pointer-to-function and pointer-to-object
    

    😞


  • Mod

    std::cout << std::hex << reinterpret_cast<intptr_t>(&MyFunc);
    


  • Funktioniert, danke 🙂


Log in to reply