ステータスコードと真偽値
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/06 02:21 UTC 版)
「ブーリアン型」の記事における「ステータスコードと真偽値」の解説
0が偽、0以外が真というルールは、C言語文化圏で必ずしもいつもそうとは限らず、ライブラリやフレームワークによっては別のルールの場合もある。C言語文化圏で最も顕著な例はUnix等における終了ステータスの慣習であろう。正常を示す0が真、異常を示す0以外の残り全てが偽(エラーコード)という扱いであり、シェルのコマンド行中の && や || は終了ステータスの値をそのように扱って短絡評価の動作をする。これは、異常については「何が起きたのか」といったような情報が必要なことが多いため、といったような理由がある。 「終了ステータス」も参照 COMのステータスコードとして使われる32ビット整数のHRESULT型は、ゼロを成功(S_OK)、正数を準成功(S_FALSE: 失敗ではないが否定的な状態)、負数を失敗(E_FAILなど)、とみなす。成否の判定のためにSUCCEEDED()/FAILED()マクロが用意されている。 C11で標準化されたerrno_t型はゼロを正常(エラーなし)とみなす。 また、比較などで「小なり」「等しい」「大なり」の3通りの意味を返したい、といった場合には、負の値・ゼロ・正の値、とするのが自然であるため、たとえば代表例の strcmp() 関数では、文字列が等しいということを示すためにゼロが返される。なお、単に「文字列が等しいか?」という比較をする場合などに、以下のように論理否定演算子!を使用したコードは一見不自然に見えるため、あえて(strcmp(s1, s2) == 0)と記述することで分かりやすさを向上する方法もある。 /* 論理否定演算子により、一見して「文字列が等しくない場合」であるかのように見えるが、実際は「文字列が等しい場合」を意味する。 */if ( ! strcmp(cmd, "hello")) { say_hello();} else if ( ! strcmp(cmd, "hi")) { say_hi();......} else if ( ! strcmp(cmd, "bye")) { exit(0);}
※この「ステータスコードと真偽値」の解説は、「ブーリアン型」の解説の一部です。
「ステータスコードと真偽値」を含む「ブーリアン型」の記事については、「ブーリアン型」の概要を参照ください。
- ステータスコードと真偽値のページへのリンク