Adresse Funktion ausgeben
-
Hey Leute,
versuche gerade zu Testzwecken die Adresse einer beliebigen Funktion über die Konsole auszugeben.
Bisher hat es nur so geklappt:
int g(int a) { return a; } int main() { int (*p)(int) = g; cout << p << endl; return 0; }
Gibt es auch eine Möglichkeit ohne den Umweg über den Zeiger p?
So etwas wie
int g(int a) { return a; } int main() { cout << g << endl; return 0; }
Klapp nicht, da der Compiler die Argumente vermisst, obwohl g streng gesehen ein Pointer (auf eine Funktionsdefinition) ist oder?
Gruß
-
Wie wäre es mit einem (reinterpret) Cast?
-
#include <iostream> using namespace std; int f (); int main(int argc, char* argv[]) { cout<< "f addr decimal: " << f << endl; cout<< "f addr hexadecimal: " << hex << f << endl; system("PAUSE"); return 0; } //--------------------------------------------------------------------------- int f () { cout<<"ok"; return 0; }
-
Geht nicht, das wird zu bool.
-
MatheStein schrieb:
versuche gerade zu Testzwecken die Adresse einer beliebigen Funktion über die Konsole auszugeben.
std::cout << "0x" << std::hex << reinterpret_cast<intptr_t>(&fkt);
-
Gugelmoser schrieb:
MatheStein schrieb:
versuche gerade zu Testzwecken die Adresse einer beliebigen Funktion über die Konsole auszugeben.
std::cout << "0x" << std::hex << reinterpret_cast<intptr_t>(&fkt);
Nope. http://stackoverflow.com/questions/2741683/how-to-format-a-function-pointer
Das gilt als Erweiterung natürlich auch für C++, da ostream nur eine Überladung für void* hat.