私は C++ でコーディングしており、失敗した場合に NULL を返す C 関数を使用しています。その戻り値を NULL または nullptr と比較して、どうするのが正しいと思いますか?
if ((CreateEventEx(myEventHandleHere) == NULL)
{
...
}
また
if ((CreateEventEx(myEventHandleHere) == nullptr)
{
...
}
それはCが使用するNULL
ものであるため、使用します(また、nullptr
C++ 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