[解決済み] C/C++のNULLポインタのチェック [終了しました]。
2022-04-21 14:39:33
質問
最近のコードレビューで、ある貢献者が、すべての
NULL
は、ポインタに対するチェックを次のように行う。
int * some_ptr;
// ...
if (some_ptr == NULL)
{
// Handle null-pointer error
}
else
{
// Proceed
}
ではなく
int * some_ptr;
// ...
if (some_ptr)
{
// Proceed
}
else
{
// Handle null-pointer error
}
しかし、このコードに取り組んでいる人なら誰でも、ポインタ変数を
if
文は、暗黙のうちに
NULL
. また、2番目の方法の方が、この種のバグが発生する可能性が少ないと感じています。
if (some_ptr = NULL)
を見つけるのも、デバッグするのも、まったくもって面倒です。
どちらの方法が良いか、またその理由は?
解決方法は?
私の経験では
if (ptr)
または
if (!ptr)
が望ましい。これらは、シンボル
NULL
. 偶発的な割り当ての可能性を排除することができます。そして、明確で簡潔である。
編集する。
SoapBoxがコメントで指摘しているように、以下のようなC++のクラスと互換性があります。
auto_ptr
への変換を提供するもので、ポインタとして機能するオブジェクトである。
bool
を使えば、まさにこのイディオムを実現することができます。これらのオブジェクトでは
NULL
はポインタへの変換を呼び出さなければならず、これは他の意味での副作用があるかもしれません。
bool
変換が意味するものです。
私は、不要なテキストを排除して意味を述べているコードを好みます。
if (ptr != NULL)
と同じ意味です。
if (ptr)
が、その代償として冗長な特異性を持つ。次に論理的なのは
if ((ptr != NULL) == TRUE)
そして、その道は狂気に満ちている。C言語では
if
,
while
などは、0以外の値が真、0が偽という具体的な意味を持つ。冗長性では明確にはならない。
関連
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] instanceofを呼び出す前にnullチェックは必要ですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] Pythonでnullオブジェクトを参照する
-
[解決済み] カラムの変更:NULLをNOT NULLに変更する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み】'std::cout'への未定義の参照