C言語の学習順
C言語を初めて学ぶ人向けの記事一覧です。
初めての人は、上から順に進めてください。
読む順番
| 順番 | 記事 | これを理解するとできるようになること |
|---|---|---|
| 0 | Windows 11 + WSL + VS CodeでC言語を動かす | C言語のコードを書き、コンパイルして実行できるようになります。 |
| 1 | C言語の基本|初めてのプログラムを動かしながら、書き方と考え方を学ぶ | 変数、計算、条件分岐、繰り返し、配列、文字列、関数を使い、簡単なプログラムを自分で組み立てられるようになります。 |
| 2 | C言語の基礎練習問題集|入力・条件分岐・繰り返し・配列の最大値まで | 入力、条件分岐、繰り返し、配列を組み合わせ、問題をコードへ落とし込む練習ができます。 |
| 補足 | C言語のmain関数入門|int main(void)・argc・argv・void mainの違い |
main 関数の役割、int main(void) を使う理由、コマンドライン引数の受け取り方が分かります。 |
| 3 | C言語のポインタ入門|「値」と「場所」を分けて考える | 値とアドレスの違い、& と * の意味、関数から呼び出し元の値を変更する考え方が分かります。 |
| 4 | C言語でデータをまとめて扱う|構造体・typedef・enum・構造体配列 | 商品・社員・センサー情報のように、複数の項目を1件のデータとして扱えるようになります。 |
| 5 | C言語の構造体・const・enum・#define入門|違いと使い分けをコードで理解する |
const で変更しない意図を示し、enum で状態へ名前を付け、#define とマクロを適切に使い分けられるようになります。 |
| 6 | C言語の動的メモリ管理入門|malloc・calloc・realloc・free・memset | 実行時に必要な数だけメモリを確保し、不要になったメモリを安全に解放する考え方が分かります。 |
| 7 | C言語でデータを保存する|ファイル操作・ヘッダーファイル・複数ファイルへの分割 | データをファイルへ保存・読込し、役割ごとに .c と .h へコードを分けられるようになります。 |
| 8 | C言語のstaticとexternを図解|.c/.h・グローバル変数・複数ファイルの仕組み |
static による公開範囲の制限、extern による変数共有、複数ファイルでグローバル変数を安全に扱う方法が分かります。 |
補足記事の位置付け
main 関数の記事は補足です。
基本記事を読んだ直後に読むと、int main(void) を使う理由や、argc・argv の役割を理解できます。
ただし、ポインタや構造体の学習を始める前に必ず読む必要はありません。コマンドライン引数を使う必要が出たときに読んでも問題ありません。
構造体の後に読む記事
構造体の記事を読んだ後は、const、enum、#define の記事へ進みます。
構造体で関連するデータを1件にまとめる方法を理解してから読むと、次の使い分けがつながります。
-
constで、関数が値を変更しない意図を示す -
enumで、状態や結果へ意味のある名前を付ける -
#defineで、配列サイズや固定値を管理する - 関数形式マクロで起きやすい問題を避ける
- 既存のマクロ名やヘッダガードとの関係を理解する
ファイル操作の後に読む記事
ファイル操作の記事では、まず .c と .h に処理を分ける理由を理解します。
その後に static と extern の記事を読むと、複数ファイルでコードや変数を扱う仕組みを整理できます。
- 他の
.cファイルから使わせない関数にはstaticを付ける -
staticを付けた変数は、その.cファイル内だけで使う -
staticローカル変数は、関数を抜けても値が残る - 複数の
.cファイルで同じ変数を共有する場合はexternを使う - グローバル変数の実体は、1つの
.cファイルにだけ書く - 複数の
.cファイルに同名のstatic変数を書くと、別々の変数になる
参考
コーディング規約の基準(C言語)|命名/メモリ/エラー処理/未定義動作
コードを書き始めたら、命名、初期化、メモリ解放、エラー処理、未定義動作で守るべき基準を確認してください。
この順番で学ぶと
- C言語のコードを書き、コンパイルして実行できる
- 入力・計算・判定・繰り返し・配列を組み合わせて小さなプログラムを作れる
- ポインタを使い、値とアドレスの関係を説明できる
- 構造体を使い、複数の項目を1件のデータとして扱える
-
const、enum、#defineを使い、値・状態・固定値を整理できる - 動的メモリを確保し、不要になったメモリを安全に解放できる
- ファイルへデータを保存・読込できる
- 処理を複数の
.cと.hへ分けられる -
staticとexternを使い、関数や変数の公開範囲を整理できる