コンパイルの仕組みと gcc の警告から、変数と制御構文・関数と配列・ポインタ・malloc と free・構造体と連結リスト・ファイルと make・システムコールまで。全50レッスンで「ポインタとメモリを自分で管理し、簡易シェルを 1 本書ける」ところまで進みます。コード・警告・サニタイザの報告はすべて gcc 16.2.0(C23)で実際に動かしたものです。
全50レッスンを7つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ C はブラウザ内で実行できないため、第2回で用意する gcc 16 の Docker コンテナか、Linux・WSL の gcc で試してください。第7章のシステムコールは Linux が前提です。
コンパイルの 4 段階と gcc の警告から始め、変数と型・演算子・標準入出力・条件分岐・ループまで進みます。書いたコードを gcc に通し、警告とサニタイザに間違いを見つけてもらう習慣をここで作ります。
処理を関数に分け、変数の見える範囲と寿命を押さえます。配列・文字列・多次元配列まで進み、「配列の外を読む」間違いをサニタイザで見つけるところまで確かめます。
アドレスとポインタ、ポインタ演算、配列や文字列との関係、const、関数ポインタ、ポインタのポインタを順に扱います。最後は null や行き先の無いポインタがどう壊れるかを、サニタイザで確かめます。
スタックとヒープの地図を描き、malloc・calloc・realloc・free で自分でメモリを借りて返します。リーク・解放後の使用・二重解放・バッファオーバーフローを、LeakSanitizer・valgrind・AddressSanitizer で見つけるところまで進みます。
構造体でデータをまとめ、パディング・共用体・列挙型でメモリの中の並びを見ます。最後は連結リスト・スタック・キューを C で自作し、ポインタとメモリ管理を組み合わせて使います。
テキストとバイナリのファイル入出力、ヘッダでの分割コンパイル、make、プリプロセッサ、静的・共有ライブラリを扱います。最後はコマンドライン引数を getopt で読み、道具としてのプログラムに仕上げます。
open・read・write のシステムコールを strace でのぞき、fork・exec・pipe・シグナルでプロセスを操ります。最後は全50回の内容をまとめて、パイプとリダイレクトの使える簡易シェルを作ります。
全50レッスンを終えたら、次は C で手で管理していたメモリを言語が守ってくれる Rust 入門コース や、システムコールとシェルの先にある Linux 入門コース・Linux システム管理入門コース へ。メンバーシップで全コースが解放されます。