1. ホーム
  2. c++

[解決済み] ポインタから整数への変換

2023-01-27 22:34:50

質問

私は、既存のコードを 64 ビットマシンに適合させようとしています。主な問題は、1 つの関数で、以前のコーダーが関数自体で適切な型に変換される void* 引数を使用していることです。簡単な例です。

void function(MESSAGE_ID id, void* param)
{
    if(id == FOO) {
        int real_param = (int)param;
        // ...
    }
}

もちろん、64bitのマシンでは、エラーが出ます。

error: cast from 'void*' to 'int' loses precision

これを修正して、32ビットマシンで、できるだけきれいに動作するようにしたいのですが。何かアイデアはありますか?

どのように解決するのですか?

使用方法 intptr_tuintptr_t .

ポータブルな方法で定義されていることを確認するために、次のようなコードを使用することができます。

#if defined(__BORLANDC__)
    typedef unsigned char uint8_t;
    typedef __int64 int64_t;
    typedef unsigned long uintptr_t;
#elif defined(_MSC_VER)
    typedef unsigned char uint8_t;
    typedef __int64 int64_t;
#else
    #include <stdint.h>
#endif

これを.hファイルに記述し、必要な場所でインクルードすればよいのです。

あるいは、Microsoft 版の stdint.h ファイルを ここで から移植可能なものを使用するか はこちら .