1. ホーム
  2. c

[解決済み] 警告: 整数からポインタをキャストせずに返しますが、希望通り整数を返します。

2022-02-09 13:23:24

質問

C 言語の void * 関数呼び出しから整数を返す適切な方法を見つけようとしています。

つまり

#include <stdio.h>

void *myfunction() {
 int x = 5;
 return x;
}

int main() {
  printf("%d\n", myfunction());
  return 0;
}

でも、ずっと

警告: 整数からポインタをキャストなしで返します。

これを動作させるために必要なキャストはあるのでしょうか?実際の myfunction は構造体や文字列へのポインタを返しますが、これらはすべて期待どおりに動作します。

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

何をしようとしているのか明らかではありませんが、xでポインタ演算をしようとしていて、この演算ではxを整数とし、戻り値ではvoidポインタにしたいのだと仮定します。なぜこれが意味を持つのか持たないのかはさておき、xを明示的にvoidポインタにキャストすることで警告を除去することができます。

void *myfunction() {
 int x = 5;
 return (void *)x;
}

これは、システムがどのようにポインタを実装しているかによりますが、おそらく別の警告を発します。intの代わりにlongを使用する必要があるかもしれません。

void *myfunction() {
 long x = 5;
 return (void *)x;
}