[解決済み] なぜ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
.
関連
-
警告: 'struct XXX' はパラメータリストの内部で宣言されています。
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] Mockitoでvoidメソッドをモックする方法
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] C言語プログラミング言語」の本には、なぜmallocをキャストしなければならないと書いてあるのですか?
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
-
[解決済み] なぜ未使用の関数パラメータをvoidにキャストするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
Solve Dev-c++ [エラー] 'for' ループの初期宣言は、C99 または C11 モードでのみ許可されます。
-
関数 'malloc' の暗黙の宣言に対する解決策
-
C 言語のポインタ配列のポインタ型、ポインタに値を割り当てるために配列名を使用、コンパイル時の警告:互換性のないポインタ型からの初期化
-
警告: 'struct XXX' はパラメータリストの内部で宣言されています。
-
[解決済み] mallocで文字列を確保する
-
[解決済み] なぜmemsetではなくbzeroを使用するのですか?
-
[解決済み] C言語で "unsigned long "をprintfする方法は?
-
[解決済み] なぜ未使用の戻り値をvoidにキャストするのですか?