C言語

処理系の簡素化

配列参照時の自動的な添字のチェックをしない
これを要因とする代表的なバグがバッファオーバーフロー(固定長のバッファをはみだして上書きが行われてしまう)である。標準ライブラリにはバッファオーバーフローを考慮していない関数があり、かつ多用されがちなため、しばしば脆弱性の原因となる。また、プログラムにより制御する事で可変長配列を可能にしている。
文字列を格納するための特別な型が存在しない
文字列にはchar型の配列やポインタを利用する。言語仕様上に特別な扱いはないが、ナル文字(ヌル文字、'\0')を終端とする文字列表現を使い、その操作をする標準ライブラリ関数が提供されている。これは実質的にメモリ領域のポインタアクセスそのもので、バッファオーバーランの元凶の1つとなっている。後継言語では文字列処理が特に強化されている場合が多い。
自動変数の自動的な初期化をしない
自動変数(静的でないローカル変数)は変数の中でも最も頻繁に用いられる。初期化しない変数の初期値は不定である。変数宣言・初期化の仕様による制限から、変数宣言の時点で初期化せず後で代入することで初期化に代えることが日常的で、誤って不定の値の変数を読み出すバグを作り込みやすい。なお自動変数の自動とは変数の領域の確保と開放が自動であるという意味であり、自動的に初期化されるという意味ではない。

戻る