終了を表すための専用の値
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/22 02:53 UTC 版)
主に可変長データの終了を識別するために、終了を示す記号として予約された値。 番兵の具体例としては、LISPで無効値を示すNILや、C言語の文字列終端を示すヌル文字(\0)などがある。また、ポインタを扱う言語ではヌルポインタが定義されており、線形リストや木構造などの終端を示すために使われる。 番兵を含むデータを処理するプログラムは、通常はループで入力データを処理しており、新たなデータを取得するとまず番兵か否かを判定する条件分岐を実行する。以下に、C言語における文字列比較関数 strcmp の実装例を示す。 int strcmp(const char s[], const char t[]){ int i = 0; while (s[i] != '\0' && t[i] != '\0') { /* どちらかの文字列に番兵が現れたら終了 */ if (s[i] != t[i]) { break; /* 不一致箇所を検出したら終了 */ } else { i++; /* 一致している場合は次の文字へ */ } } return s[i] - t[i];} 実データに出現する値だと、実データなのか終了なのか判断できないため、実データとしては出現しない値を使う必要がある。C言語の getchar 関数では、入力データとして char 型のすべての値が出現する可能性があるため、char 型の範囲では番兵のための値を確保することができない。そのため getchar 関数の返値の型は、より広い範囲の値を扱える int 型になっており、入力データを unsigned char 型の範囲の値として扱い、unsigned char 型としては出現しない値を番兵EOFとして使用している(-1を使う処理系が多い)。 コンピュータで可変長データを表現する方法は、末尾に番兵を置く方法と、長さを別途与える方法の2種類に大別できる。
※この「終了を表すための専用の値」の解説は、「番兵」の解説の一部です。
「終了を表すための専用の値」を含む「番兵」の記事については、「番兵」の概要を参照ください。
- 終了を表すための専用の値のページへのリンク