4

私は C++ でコーディングしており、失敗した場合に NULL を返す C 関数を使用しています。その戻り値を NULL または nullptr と比較して、どうするのが正しいと思いますか?

if ((CreateEventEx(myEventHandleHere) == NULL)
{
    ...
}

また

if ((CreateEventEx(myEventHandleHere) == nullptr)
{
    ...
}
4

4 に答える 4

0

それはCが使用するNULLものであるため、使用します(また、nullptrC++ 11で新しいため、C ++ 11を使用していない場合は使用する必要がありますNULL)。一方、どちらの値も明示的にチェックするのではなく、代わりに暗黙的な比較を行い、コンパイラーにチェックさせること!= 0ができます。

if (CreateEventEx(myEventHandleHere))
{
    ...
}

値を変数に割り当てて、後で解放できるようにする必要があります (それが C API で必要な場合)。

TypeName event = CreateEventEx(myEventHandleHere);
if (event)
{
    ...
    free event when done...
}
于 2014-09-03T17:51:44.267 に答える
-1

関数が 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

于 2014-09-03T18:22:23.140 に答える