Contents
全体像と学習スケジュール
| 期間 | 学習時間目安 | 主なテーマ |
|---|---|---|
| Day1 | 15 〜 30 分 | 開発環境確認・Hello World |
| Day2‑6 | 毎日 15 〜 30 分 | 基本構文、入出力、制御構造、関数・ヘッダー、配列・文字列、ポインタ |
| Day7 | 30 分程度 | ミニプロジェクトで総合演習 |
学習のポイント
- 毎日少しずつ手を動かす – 手を動かさないと概念が頭に残りません。
- コンパイル → 実行 → エラーメッセージ読解 のサイクルを繰り返すことでデバッグ力が身につきます。
- コードは必ず自分で書く – コピペだけでは理解できません。
開発環境の構築
1️⃣ Windows(MSYS2 + GCC)
⚠️ バージョン番号やリリース日を書かない
常に公式サイト (https://www.msys2.org) の「Download」ページから最新のインストーラを取得してください。
手順
| 手順 | コマンド・操作 |
|---|---|
| ① インストーラ実行 | ダウンロードした msys2.exe をダブルクリックして指示に従う。デフォルト設定で問題ありません。 |
| ② パッケージ情報の更新 | MSYS2 のターミナル (「MSYS2 MSYS」ショートカット) で bash<br>pacman -Syuu # 初回は数回実行が必要な場合があります<br> |
| ③ GCC と make をインストール | bash<br>pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-make<br> |
| ④ PATH の設定 | MSYS2 は自動で C:\msys64\mingw64\bin をシステム環境変数に追加しません。手動で追加するか、スタートメニューの「MSYS2 MinGW 64-bit」ショートカットからターミナルを起動して使用してください(このショートカットは既に PATH が通った状態で起動します)。 |
| ⑤ 動作確認 | bash<br>gcc --version # バージョン情報が表示されれば OK<br> |
根拠:MSYS2 の公式ドキュメント (https://www.msys2.org/wiki/Installation) に、インストーラはシステム PATH を変更しない旨が明記されています。
2️⃣ macOS(Homebrew)
- Homebrew が未導入の場合はターミナルで
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - GCC (または clang) と make をインストール
bash
brew install gcc make - バージョン確認
bash
gcc-13 --version # Homebrew が提供する最新版が表示されます
macOS には Xcode Command Line Tools が標準で clang を提供しています。Xcode が不要な場合は上記の Homebrew 手順だけで十分です。
3️⃣ Linux(ディストリビューション別)
| ディストリビューション | コマンド例 |
|---|---|
| Ubuntu / Debian 系 | bash<br>sudo apt update && sudo apt install build-essential<br> |
| Fedora / RHEL 系 | bash<br>sudo dnf groupinstall "Development Tools"<br> |
| Arch Linux | bash<br>sudo pacman -S base-devel<br> |
インストール後は gcc --version または clang --version で確認してください。
おすすめ IDE とエディタ拡張機能
| ツール | 特徴 | 導入方法 |
|---|---|---|
| Visual Studio Code + C/C++ 拡張 (Microsoft) | 軽量・デバッグ統合・IntelliSense が標準装備。Windows/macOS/Linux すべてで同一設定が使える。 | https://code.visualstudio.com → Extensions タブで「C/C++」を検索 |
| Code::Blocks | GUI ベースのビルド設定が初心者向け。MinGW (Windows) がバンドルされているパッケージもあり。 | http://www.codeblocks.org/downloads/ |
| CLion(有償) | 強力なリファクタリングとデバッグ機能。教育機関・学生は無料ライセンスが取得可能。 | https://www.jetbrains.com/clion/ |
Tip:VS Code の「C/C++ Extension Pack」(clangd, CMake Tools 等) を合わせてインストールすると、コード補完とビルド構成が一層スムーズになります。
1 週間の実践課題(Day1〜Day7)
以下は 各日 15 〜 30 分 で完結できるサンプルです。自分の環境でコンパイル・実行し、出力が期待通りか必ず確認してください。
Day1 – Hello World(開発環境の最終チェック)
|
1 2 3 4 5 6 7 |
#include <stdio.h> int main(void) { puts("Hello, C!"); return 0; } |
- コンパイル
bash
gcc hello.c -o hello # Windows は gcc.exe、macOS/Linux は同様に実行 - 実行 →
Hello, C!が表示されれば成功
Day2 – 基本データ型と入出力
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <stdio.h> int main(void) { int i = 10; float f = 3.14f; char c = 'A'; printf("i=%d, f=%.2f, c=%c\n", i, f, c); /* ユーザーから整数入力を受け取る例 */ printf("整数を入力してください: "); scanf("%d", &i); printf("入力された数は %d です。\n", i); return 0; } |
確認ポイント
- scanf が正しくブロックし、入力した整数が表示されること。
Day3 – 条件分岐とループ
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <stdio.h> int main(void) { int n, sum = 0; printf("1〜10 の合計を求めます。\n"); for (int i = 1; i <= 10; ++i) { sum += i; } printf("合計: %d\n", sum); printf("整数を入力してください(偶数判定): "); scanf("%d", &n); if (n % 2 == 0) puts("偶数です。"); else puts("奇数です。"); return 0; } |
Day4 – 関数とヘッダーファイル
ファイル構成
|
1 2 3 4 5 |
project/ ├─ main.c ├─ math_utils.h └─ math_utils.c |
math_utils.h
|
1 2 3 4 5 6 7 8 |
#ifndef MATH_UTILS_H #define MATH_UTILS_H int add(int a, int b); int mul(int a, int b); #endif // MATH_UTILS_H |
math_utils.c
|
1 2 3 4 5 |
#include "math_utils.h" int add(int a, int b) { return a + b; } int mul(int a, int b) { return a * b; } |
main.c
|
1 2 3 4 5 6 7 8 9 |
#include <stdio.h> #include "math_utils.h" int main(void) { printf("3+5 = %d\n", add(3, 5)); printf("4*7 = %d\n", mul(4, 7)); return 0; } |
ビルドコマンド
|
1 2 |
gcc main.c math_utils.c -o app |
Day5 – 配列と文字列操作
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <stdio.h> #include <string.h> void reverse(char *s) { size_t len = strlen(s); for (size_t i = 0; i < len / 2; ++i) { char tmp = s[i]; s[i] = s[len - 1 - i]; s[len - 1 - i] = tmp; } } int main(void) { char buf[100]; printf("文字列を入力してください: "); scanf("%99s", buf); // 空白で区切られた単語のみ reverse(buf); printf("逆順: %s\n", buf); return 0; } |
ポイント
- バッファオーバーフロー防止のため scanf("%99s", ...) と幅指定する。
Day6 – ポインタと参照渡し
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <stdio.h> void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } int main(void) { int x = 12, y = 34; printf("swap 前: x=%d, y=%d\n", x, y); swap(&x, &y); printf("swap 後: x=%d, y=%d\n", x, y); return 0; } |
確認事項
- アドレス演算子 & とデリファレンス * が期待通りに動作すること。
Day7 – ミニプロジェクト:簡易電卓
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <stdio.h> int main(void) { double a, b; char op; printf("例: 3 + 4 の形で入力してください > "); if (scanf("%lf %c %lf", &a, &op, &b) != 3) { puts("入力形式が正しくありません。"); return 1; } switch (op) { case '+': printf("%.2f\n", a + b); break; case '-': printf("%.2f\n", a - b); break; case '*': printf("%.2f\n", a * b); break; case '/': if (b == 0.0) { puts("ゼロ除算は許可されていません。"); return 1; } printf("%.2f\n", a / b); break; default: puts("サポート外の演算子です。"); return 1; } return 0; } |
評価基準
| 基準 | 内容 |
|---|---|
| コンパイル成功 | gcc calculator.c -o calc がエラーなしで完了 |
| 全ケース通過 | + - * / の四則演算が正しく計算でき、ゼロ除算はエラーメッセージを表示 |
無料教材・参考書・動画リスト
オンラインチュートリアル(日本語・英語)
| 名称 | 内容 | URL |
|---|---|---|
| Tutorialspoint – C Programming | 基本構文、ポインタ、標準ライブラリまで網羅的に解説 | https://www.tutorialspoint.com/cprogramming/index.htm |
| Learn‑C.org | ブラウザ上で実行できる対話型演習が多数 | https://www.learn-c.org/ |
YouTube 系学習動画(字幕・スローモーションあり)
- ドットインストール – C言語入門(全 30 分、初心者向け)
- ProgrammingKnowledge – “C Programming Tutorial for Beginners”(英語字幕付き、実装例が豊富)
書籍・PDF(無料で合法的に閲覧可能なもの)
| 書名 | 特徴 | 入手先 |
|---|---|---|
| 『C言語プログラミング基礎』(大学公開教材) | 演習問題付き、全 120 ページ程度の入門書 | 各大学のオープンコースウェアやリポジトリで配布 |
| K&R 第2版(抜粋) | 標準的な言語仕様と良質なサンプルコードが掲載 | O'Reilly の公式プレビューページ(無料閲覧可能) https://www.oreilly.com/library/view/c-programming-language/9780131103627/ |
注意:K&R 本体の全文 PDF 配布は著作権で保護されています。上記リンクは出版社が提供する「プレビュー」ページのみです。
学習定着のための復習とデバッグテクニック
1. クイズ形式の自己チェック(各 Day の終わりに実施)
| Day | サンプル問題 |
|---|---|
| Day4 | add 関数を int add(void) と宣言したらコンパイルエラーになるか? |
| Day6 | ポインタ変数 int *p = NULL; に対して *p = 5; を実行すると何が起きるか? |
自分でコードを書き、コンパイルエラーを意図的に発生させて解決する練習 が効果的です。
2. よくあるコンパイルエラーと対処法
| エラーメッセージ | 主な原因 | 修正例 |
|---|---|---|
undefined reference to 'main' |
main 関数が無い、または名前が間違っている |
int main(void) と正しく記述 |
error: expected ';' before '}' token |
行末のセミコロン忘れ | printf("Hello"); のように ; を付与 |
warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ |
scanf("%d", i); とポインタ渡しを忘れている |
scanf("%d", &i); に修正 |
3. デバッガ基本操作(gdb + VS Code)
- ブレークポイント設定 – VS Code の左側余白クリックで赤丸が表示。
- 実行開始 –
F5キーまたは「Run → Start Debugging」からデバッグセッション開始。 - ステップ実行 –
F10(次の行へ)/F11(関数内部へ)でコードの流れを追う。 - 変数確認 – デバッグコンソールに
print iと入力すると現在値が表示される。
Tip:
gcc -g -O0でデバッグ情報付きかつ最適化なしでビルドすると、行番号と変数名が正確に保持されます。
最終ミニプロジェクトと次のステップ
プロジェクト例(再掲)
| プロジェクト | 主な機能 |
|---|---|
| 簡易電卓 | 四則演算、入力形式エラーチェック、ゼロ除算防止 |
| 文字列逆転ツール | 任意長 (最大 100 文字) の文字列を逆順に出力、空文字・スペース対応 |
評価チェックリスト
- ✅ コンパイルがエラーなしで完了するか
- ✅ 全入力ケース(正しい演算子・不正な入力)で期待通りの出力/エラーメッセージになるか
次に挑戦すべきこと
| フェーズ | 推奨アクション |
|---|---|
| コードチャレンジ | AtCoder、LeetCode の「C 言語」タグで週 1 回は問題を解く。 |
| 標準ライブラリ拡張学習 | stdlib.h(動的メモリ管理)、math.h(三角関数・指数)を使った小プログラムを書いてみる。 |
| バージョン管理 | GitHub にリポジトリを作成し、毎日コミットする習慣をつける。プルリクエストで自分のコードレビューも実施。 |
| ビルドシステム入門 | CMake の基本構文 (CMakeLists.txt) を学び、マルチファイルプロジェクトを管理できるようにする。 |
まとめ(全体の振り返り)
- 環境構築は「最新版を公式サイトから取得」し、PATH 設定は手動かショートカット経由で行う
- 毎日 15 〜 30 分のハンズオンが最も効果的 – 手を止めずにコードを書き続けることで概念が定着する。
- Day1‑Day7 の課題は、C 言語で必須となる構文・データ型・制御・関数・配列・ポインタの全体像を網羅しているので、これらを確実にクリアすれば「Hello World」レベルから一歩進んだ実装が可能になる。
- 学習資源は無料かつ合法的に入手できるものだけを選択し、K&R の場合は公式プレビューページへのリンクに留めた。
- デバッグと自己チェックのプロセスを組み込むことでエラー解決力が自然に身につく。gdb/VS Code デバッガの基本操作を覚えておけば、実務でも役立つ。
このロードマップを 1 週間で走破したら、次は 「アルゴリズムとデータ構造」や「組み込み系開発」へのステップアップ が自然に見えてくるはずです。継続的な練習とコードレビューを通じて、C 言語の実践力をさらに高めましょう。
本記事は 2024 年 10 月時点で確認された情報に基づいています。OS やツールのバージョンが変わった場合は、公式サイトや最新ドキュメントをご参照ください。