1

次の関数プロトタイプを持つ gcc を使用して、Linux でソース コードのチャンクを維持する必要があります。

int foo(const void*, ...)

この関数に整数を渡す必要があります。これが悪い考えであることは承知していますが、この段階では、ソース コードを変更することは許可されていません。

つまり、私は電話しなければなりませんfoo(n)(nは として定義されますint n)

64 ビット マシンでは、次のエラーが発生します。

cast to pointer from integer of different size

私が理解しているように、これは 32 ビット マシンの整数のサイズが 4 バイトであるのに対し、void へのポインターのサイズは 8 バイトであるためです。

最初にサイズ 4 バイトの整数をサイズ 8 バイトの long にキャストすることで、コンパイル エラーを解決します。だから私はやったfoo((long)n)

これがこの問題に対処するための許容可能な方法なのか、それとも他に提案があるのだろうか?

4

1 に答える 1

2

を使用できますintptr_tが、オプションであり、 では使用できない場合がありますstdint.h

intptr_t n = 1;
foo((void*)n);
于 2013-10-14T11:21:50.660 に答える