64 ビット互換性のためにポインタを整数に変換する
元々 32 ビット マシン用に設計された既存のコードベースでは、次の関数が使用されています。 void* 引数。その後、その引数内で適切な型に変換されます。 function:
void function(MESSAGE_ID id, void* param) { if(id == FOO) { int real_param = (int)param; // ... } }
このコードを 64 ビット環境に適応させると、コンパイラーはエラーのフラグを立てます:
error: cast from 'void*' to 'int' loses precision
これに対処するには、32 との互換性を維持する修正が必要です。 -ビットマシンとして
解決策
最新の C アプローチの場合、reinterpret_cast
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
ポインター格納用の正しい整数型
ポインターを整数として格納する場合に推奨されるデータ型は、uintptr_t または intptr_t です。これらの型は
適切なキャスト演算子
C では、 reinterpret_cast がこの変換に推奨されるキャスト メカニズムです。これは、C では推奨されなくなった C スタイルのキャスト演算子を置き換えます。
以上が64 ビット互換性のためにポインタを整数に安全に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。