概要
1972年にAT&Tベル研究所のDennis MacAlistair Ritchie氏(1941年9月9日~2011年10月12日)とBrian Wilson Kernighan氏がUNIXの移植性を高めるために創ったプログラミング言語。
本来はOSやデバイスドライバなど、ハードウェア寄りのソフトウェアへの適用を得意とするが、その移植性の高さからアプリケーションソフトウェアの開発にも幅広く適用されている。言語規格を特定用途向けやオブジェクト指向プログラミングに拡張したものや、C言語の文法による特徴を採用し類似した文法を使用している言語も多い。
特徴
OSのカーネル向けの低レベル(ハードウェア寄り)の記述ができることが特徴。プログラマにできることを制限しないC言語のスタイルはハッカーにとりわけ好まれ、適用範囲が広い反面、バッファオーバーフローなどのセキュリティホールの元凶ともなっている。
プログラミング言語としての自由度が高いため、良くも悪くも「何でも出来てしまう」言語。記述スタイルの自由度も高く、一見アスキーアート仕立てになっているものなど、到底プログラミングコードに見えないコードも書く事ができる。半面、メンテナンスやデバッグが煩雑になりがちである。
このC言語の設計思想は、高レベルな記述に特化してプログラマにできることを制限し、冗長な記述を強制することでコードを読みやすくするCOBOLとは対極といえる。初心者にとってのとっつきやすさはあまり考えられておらず、1990~2000年代には大学の授業などでC言語を学ばされプログラミングに挫折する人も多かった。
言語仕様そのものは他の高級言語に比べて非常に簡素であり、また標準のライブラリも貧弱。他言語では標準化されている多くの機能を外部のライブラリに依存する必要がある。JavaやC#のようなガベージコレクション(GC、使っていないメモリの自動解放機能)を持っておらず、メモリ管理の煩わしさも欠点に挙げられる。ただし、GCはいつ発生するか予測不能なので、都合が悪いタイミングにGCが発生しないようチューニングに手間をとられるという本末転倒な事態も起こりうる。C言語でも外部ライブラリを使えばGCを使えないこともないが、採用されることは少ない。
あらゆる環境で幅広く使われるが、OSやデバイスドライバのほか、動作環境の資源制約が厳しい組込みシステムで特に多用される。現在はJavaが過去にC言語が使われたような環境で広く使われるようになったが、過去に蓄積されたC言語の資産は非常に多く、C言語習得の必要性が無くなったわけではない。