山本です。

>>個人的には VALUE は void* にするのが適切であろうと思っています。
>>それは、AS/400 なるシステムではポインタと同じサイズの整数型が存在しな
>>いということを知ってしまったというのが理由です。
>
>同感です。
>
>  #define IMMEDIATE_P(x) ((VALUE)(x) & IMMEDIATE_MASK)
>
>とかしている部分がそのままでは動かないので、修正が必要そうですが。

ただ、こうすると

typedef void* VALUE;

struct hoge {int value;};

int main()
{
    struct hoge h;

    VALUE v = &h;

    struct hoge *p = v;
}

というようにユーザ定義のオブジェクトを一時的に VALUE にしたいとき。
キャストが不要になってしまうので、バグが入りやすくなるのではないか
という漠然とした不安があります。(杞憂かもしれませんが)

# 今まではこうする必要があったので、ある意味イリーガルなことをしている
# ことを意識できた。

typedef unsigned long VALUE;

struct hoge {int value;};

int main()
{
    struct hoge h;

    VALUE v = (VALUE)&h;

    struct hoge *p = (struct hoge *)v;
}
5