1. ホーム
  2. c

[解決済み] なぜfreeの戻り値をvoidにするのですか?

2023-05-28 05:52:43

質問

ある本を読んでいるのですが ( POSIX スレッドを使ったプログラミング by Butenhof, 1997) を読んでいるのですが、C を使っていて、以下の行に出くわしました。

(void)free(data);

ここで data は単に割り当てられた構造体へのポインタです。

data = malloc(sizeof(my_struct_t));

の結果はなぜ free にキャストされるのでしょうか? void ?

私のC言語の理解では、これは2つの理由で意味をなさないようです。

  • free 関数はすでに void
  • コードが戻り値を使用していない (変数に割り当てられてさえいない)

この本は1997年に書かれたものです。これはある種のレガシーなことなのでしょうか?

著者は、例が Digital Unix 4.0d で実行されたことに言及していますが、その結果を使用しないのであれば、関数の結果を決してキャストする理由を私はまだ想像することができません。

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

もし私たちが、標準的な free 関数の場合、そのプロトタイプは

void free(void *ptr);

よってキャストは全く意味がない。

では、いくつかの推測を。

作者は stdlib.h ヘッダを入れ忘れた可能性があります。そのため、コンパイラはこのプロトタイプの戻り値の型を int . このコードを静的解析したところ、コンパイラは未使用の戻り値について警告を発しました。 void 関数でないと思われる返り値について警告を出しました。このような警告は、通常、キャストを void .