C言語
UNIXの開発当初、Multicsプロジェクトが目指していた高級言語によるOSの開発という目標は見送られた。
アセンブリ言語でUNIXが作成されると、OS上で動くユーティリティを作成するためのプログラミング言語が必要とされた。
ケン・トンプソンは、当初Fortranコンパイラを作ろうとしたが、途中で放棄し、新しい言語であるB言語を作成した。
B言語はインタプリタ言語であったため動作が遅く、B言語でユーティリティを作ることはあまりなかった。
開発者達は、コンパイラなどのユーティリティを「システムプログラム」と呼んでいたが、それらの作成に使われる「システムプログラミング言語」は、OSのカーネルを作成するための言語という意味ではない。
B言語の欠点を解消するため、1971年に改良作業を開始した。
1972年にC言語のコンパイラができあがり、UNIXバージョン2において、いくつかのユーティリティを作成するために使用された。
↑ Hello, Worldプログラム | Programming Place Plus C言語編 第2章
↑ Portability of C Programs and the UNIX Systems
1 2 The Evolution of the Unix Time-sharing System
↑ ソースレベル互換 - ZDNet Japan
↑ http://www.tohoho-web.com/ex/draft/kanji.htm
↑ Rust言語でAndroidはより強固・安全に ~GoogleがOS開発への導入を進める - 窓の杜
↑ Microsoft、Windows 10の一部をRustへ書き換えてセキュリティ強化狙う | TECH+
↑ C FAQ 11
↑ 6.19 Arrays of Variable Length
↑ C の歴史 - cppreference.com
↑ Clang 拡張 C++ コンパイラ - RAD Studio
↑ Status of C99 features in GCC - GNU Project - Free Software Foundation (FSF)
自動変数(静的でないローカル変数)は変数の中でも最も頻繁に用いられる。初期化されていない変数を参照した場合、値は不定となるが、不定な値へのアクセスは未定義動作であるので、コンパイラ最適化の過程で想定しない形に改変することもある。変数宣言・初期化の仕様による制限から、変数宣言の時点で初期化せず後で代入することで初期化に代えることが日常的で、誤って不定の値の変数を読み出すバグを作り込みやすい。なお自動変数の自動とは変数の領域の確保と解放が自動であるという意味であり、自動的に初期化されるという意味ではない。
後継言語では、明示的な初期化が記述されていない変数は、不定値ではなくその変数の型の既定値(ゼロあるいはゼロ相当の値)で初期化される仕様になっていることが多い。