採用に向く条件
選ぶ理由
- ハードを直接制御でき非常に高速
- 移植性が高くどこでも動く
- OS・組込み・基盤の事実上の標準
プログラミング言語
Dennis Ritchie(ベル研究所) / 1972年登場
OS やドライバ、組込みの土台を作る低レベル言語。ハードウェアに近く高速で、ほぼすべての言語や OS の基礎になっている。
基本情報
選定ガイド
採用する理由と、事前に受け入れるべきトレードオフを分けて確認します。
採用に向く条件
事前に確認する条件
向いている用途
詳しい解説
C は 1972 年ごろに Dennis Ritchie がベル研究所で開発した、低レベルの手続き型言語です。当初は UNIX を記述するために作られ、ハードウェアに近い操作をしながらもアセンブリより読み書きしやすい、という絶妙な位置を占めました。半世紀を経た今も、OS・デバイスドライバ・組込み機器の土台として現役で使われています。
C の核心は、言語そのものが極めて小さいことです。余計な仕組みを持たず、メモリ配置やポインタ操作を直接扱えるため、生成されるコードは高速で、ハードウェアの挙動を予測しやすくなります。
横にスクロール
加えて、ほぼあらゆる CPU 向けにコンパイラが存在し、移植性が高い点も見逃せません。多くのプログラミング言語の処理系や OS 自体が C で書かれており、現代のソフトウェアの基礎になっています。
malloc/free で確保・解放を自分で行う。GC がなく、いつ何が起きるか予測しやすい反面、責任は開発者にある。#include <stdlib.h>
int main(void) {
int *a = malloc(4 * sizeof(int)); // 確保したら
a[4] = 1; // 領域外! 検出されないまま壊れる
free(a); // 解放も自分の責任
return 0;
}
| 観点 | C | C++ | Rust |
|---|---|---|---|
| 規模感 | 小さい・薄い | 巨大・多機能 | 中〜大・安全重視 |
| メモリ安全 | 自己責任 | 自己責任(RAII で緩和) | コンパイル時保証 |
| 主用途 | OS・組込み・基盤 | ゲーム・大規模高性能 | 安全な基盤・新規開発 |
| 移植性 | 極めて高い | 高い | 高い |
手動メモリ管理と領域外参照により、バグが静かに潜みます。バッファオーバーフローや解放後利用(use-after-free)は深刻な脆弱性に直結するため、境界チェック・静的解析・サニタイザ(ASan 等)を併用し、危険な関数を避けるのが定石です。新規で安全性を重視するなら Rust なども比較検討します。
総じて C は、小さく速く移植性が高い低レベル言語で、OS から他言語の土台まで現代ソフトウェアの基礎を今も支えています。
言語選定
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
OS・カーネル・ドライバ
型付け: 静的・弱い型付け / 実行方式: コンパイル(ネイティブ) / パラダイム: 手続き型
移植性が高くどこでも動く
手動メモリ管理で安全性が低い(領域外参照など)
最初の一歩
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
return 0;
}公式ドキュメント