C99 標準にはuintptr_t
、データ ポインター (オブジェクトへのポインター) を変換するための推奨される整数型がありますが、関数ポインターを格納するための同等の整数型は見つかりませんでした。私はそれを見落としましたか?
特定のコンパイラは、標準にない場合でもそのような型を定義できますが、コンパイラはuint64_t
、新しい型を定義するよりも、(たとえば) a に関数ポインタを格納できると述べる可能性が高くなります。
もう 1 つの違いは、関数ポインターでは行われない方法で、データ ポインターで整数演算を行うことが理にかなっていることです。1 つの一般的なイディオムは次のとおりです(int*)(((uintptr_t)p + 15) & ~(uintptr_t)15)
が、このイディオムを関数ポインターに適用する理由はありません。