uintmax_t
は、関数ポインタを保持するのに十分な大きさであることを保証していますか?(u)intmax_tは関数ポインタを保持できますか?
私はこの知っている:
uintmax_t
と
:次のタイプは、任意の符号なし整数型のいずれかの値を表す 可能な符号なし整数型を指定
を以下の型は、を持つ符号なし整数型を指定します。任意の有効なポインタがこの型に変換することができる無効にするプロパティは、 は次にvoidへのポインタに変換し、その結果、元のポインタに等しい を比較する:
いるuintptr_tとボイドポインタその関数ポインタを保持するのに十分な大きさでないかもしれないので、uintptr_tは関数ポインタを保持するのに十分な大きさでないかもしれません。
私はそれが十分な大きさでなければならないだろうと思うだろうが、私はドキュメントをサポートして見つけることができません。この質問は関連性があります:http://stackoverflow.com/questions/15823217/does-the-c-standard-guarantee-that-stduintmax-t-can-hold-all-values-of-std –
標準がそうだとしたら、答えはノーだと思います。 (AFAIKでは、標準では関数ポインタで変換/ワッキーを行うことはできません) –
関数ポインタを整数またはオブジェクトポインタに変換することは、未定義の動作です。これには 'void * 'が含まれます。 – Olaf