私はGoogleやSO上で答えを見つけることができなかったいくつかのコードを実行しました。あなたが期待できるようにvoid *を返すスレッド関数を見ています。しかし、スレッド関数が終了する前に、突然このスタントを引っ張ります。この戻り値の目的は何ですか?
return (void*) 0;
目的は何ですか?私はそれを理解できません。
編集:
これを理解した後に、それは彼らがSTDLIB含めスキップするためにこれを使用し、私の考えであるNULL--と同じです。
私はGoogleやSO上で答えを見つけることができなかったいくつかのコードを実行しました。あなたが期待できるようにvoid *を返すスレッド関数を見ています。しかし、スレッド関数が終了する前に、突然このスタントを引っ張ります。この戻り値の目的は何ですか?
return (void*) 0;
目的は何ですか?私はそれを理解できません。
編集:
これを理解した後に、それは彼らがSTDLIB含めスキップするためにこれを使用し、私の考えであるNULL--と同じです。
(void*)0
は別名NULL
(実際には基本的に(void*)0
と同じことになるいくつかのヘッダファイルに定義されたマクロ、例えばstddef.h
又はstdio.h
、である)、ヌルポインタです。
更新:
ヌルポインタとその有用性を説明する方法は?基本的には、「このポインタはどこにも指していない」、または「このポインタは有効なオブジェクト参照に設定されていません」という特別な値です。
ヒストリカルノート:アントニー・ホーア、1965年にはnull参照を発明したと言われて、その発明を後悔することが知られているので、彼の"Billion Dollar Mistake"、それを呼び出している:
あなたはポインタで作業するたびに、あなたは決してに確認する必要がありますnullポインタを逆参照する(定義によって何も参照しないため)。とにかく行うと、異常なプログラムの終了、一般的な保護違反、または予期しないプログラムの動作が少なくとも発生します。
スレッドからヌルを返す実用的な理由はありますか? –
素晴らしい答えstakx :) –
まあ、私はNULL
または0
は、(例えば、またはへ/ int*
から)void*
に変換することはできませんと言って任意のC++コンパイラを発生していません。しかし、スマートコンパイラや静的解析ツールでは、0 to void-pointer
を警告として報告することがあります。
この文は、コールバック実装(スレッドルーチンのようなもの)によく見られます。要求されるコールバックのプロトタイプ(pthread_create
、CreateThread
など)に従わなければなりません。したがって、その関数を実装するときは、要求されたのと同じ型を返す必要があります。 pthread_create
ルーチンの場合は、void*
を返さなければなりません。そのためreturn (void*)0;
が存在します。
'return NULL;と同じです - それはなぜ問題なのですか?たぶんコードの多くを投稿するべきでしょうか? –
私はこれまでにこれを見たことがありませんでした - それは本当に一般的ですか? –
確かに - どうしてですか?たぶん、NULLポインタ以外のポインタを返す関数の中の1つ以上のreturn文がありますか?もっとコードを投稿しない限り、私たちは知らないでしょう... –