Ist eine uintmax_t
Garantie groß genug, um einen Funktionszeiger zu halten?kann (u) intmax_t einen Funktionszeiger halten?
i wissen:
folgenden Typs bezeichnet eine ganze Zahl ohne Vorzeichen Typ fähig beliebigen Wert jeder unsigned integer Typ darstellt:
uintmax_t
und
Der folgende Typ bezeichnet einen Ganzzahltyp ohne Vorzeichen mit Eigenschaft, die jeder gültiger Zeiger auf void kann auf diese Art umgewandelt werden, umgewandelt dann wieder auf einen Zeiger auf void, und das Ergebnis wird gleich den ursprünglichen Zeiger vergleichen: uintptr_t
und dass ein hohlraum Pointer ist möglicherweise nicht groß genug, um einen Funktionszeiger zu halten, so dass ein uintptr_t auch nicht groß genug ist, um einen Funktionszeiger zu halten.
würde ich denken, es würde groß genug sein, aber ich kann nicht Dokumentation unterstützen. Diese Frage könnte relevant sein: http://stackoverflow.com/questions/15823217/does-the-c-standard-guarantee-that-stduintmax-t-can-hold-all-values-of-std –
Wenn der Standard doesn Sag es nicht, dann denke ich, die Antwort ist nein. (AFAIK, der Standard erlaubt keine Konvertierung/Verrücktheit mit Funktionszeigern.) –
Konvertierung eines Funktionszeigers zu einer Ganzzahl oder einem Objektzeiger ist undefiniertes Verhalten. Dies beinhaltet "void *". – Olaf