私は C++ でコーディングしており、失敗した場合に NULL を返す C 関数を使用しています。その戻り値を NULL または nullptr と比較して、どうするのが正しいと思いますか?
if ((CreateEventEx(myEventHandleHere) == NULL)
{
...
}
また
if ((CreateEventEx(myEventHandleHere) == nullptr)
{
...
}
それはCが使用するNULLものであるため、使用します(また、nullptrC++ 11で新しいため、C ++ 11を使用していない場合は使用する必要がありますNULL)。一方、どちらの値も明示的にチェックするのではなく、代わりに暗黙的な比較を行い、コンパイラーにチェックさせること!= 0ができます。
if (CreateEventEx(myEventHandleHere))
{
...
}
値を変数に割り当てて、後で解放できるようにする必要があります (それが C API で必要な場合)。
TypeName event = CreateEventEx(myEventHandleHere);
if (event)
{
...
free event when done...
}
関数が NULL を返す場合に問題になる理由がわかりません。それは実装の詳細です。NULL を返す古い C++ 関数が多数あります。そして、多くの新しい関数が を返しnullptrます。そのため、独自のコードで null ポインター値をからNULLに切り替えることにした場合は、関数がたまたま C として記述されているかどうかに関係なく、それについて一貫性を保つ必要があります。C++ としてコンパイルされると、C++ 関数になります。 .nullptr
でも。この場合、戻り型は aHANDLEです。HANDLEが実際に a の typedef であるという事実void*は、実装の詳細です。WinAPI ドキュメントによると、 aHANDLEが無効な場合、 に匹敵しNULLます。この場合、WinAPI ドキュメントを参照して、NULL. WinAPI が typedef を使用せず、そのすべての関数を を返すものとして文書化しただけの場合、残りの C++ コードでをvoid*使用nullptrする場合は を使用します。nullptr