コンパイルとは何か
ソースコードから実行可能ファイルへの変換プロセスを理解する
概要
C++はコンパイル言語です。つまり、 書いたプログラムはすぐには実行できず、 まずコンパイルという変換作業が必要です。
このページでは、その変換プロセスを理解します。
コンパイルとは
コンパイルとは、 人間が読める形で書かれたプログラム(ソースコード)を、 コンピュータが直接実行できる形(機械語 / バイナリ)に 変換する処理のことです。
プロセス図:
┌─────────────────────┐
│ ソースコード (.cpp) │
│ │
│ #include ... │
│ int main() { ... } │
└──────────┬───────────┘
│
│ [コンパイラ]
↓
┌─────────────────────┐
│ 実行ファイル (.exe) │
│ │
│ FFC3004589... │
│ (機械語) │
└──────────┬───────────┘
│
↓
[コンピュータが実行]
→ 画面に出力
コンパイラとは
コンパイラとは、 ソースコードをコンパイルするための プログラムです。
代表的なC++コンパイラ:
- g++ — Linux/Mac標準、Windowsでも使用可能
- clang — モダンで高速。Apple/Linux対応
- Visual Studio C++ — Windows上で動作
コンパイルのステップ
実は、コンパイルには複数のステップがあります:
1. プリプロセッシング
#include などの指示を処理します。
外部ファイルの内容を埋め込んだりします。
2. コンパイル
ソースコードをアセンブリコードに変換します。 構文チェック(エラーのチェック)も行われます。
3. アセンブル
アセンブリコードをオブジェクトファイル(.o)に変換します。 これはまだ実行できません。
4. リンク
複数のオブジェクトファイルと標準ライブラリを 結合して、 実行ファイル(.exe)を作成します。
ソースコード
↓ プリプロセッシング
プリプロセッス後ソース
↓ コンパイル
アセンブリコード
↓ アセンブル
オブジェクトファイル
↓ リンク
実行ファイル ← これが実行できる!
実例:Hello Worldをコンパイルする
Linux/Mac でコンパイルする場合(コマンドラインで実行):
# 1. ファイルをコンパイルする
$ g++ -o hello hello.cpp
# 2. 実行ファイルを実行する
$ ./hello
# 出力:
Hello, World!
g++ -o hello hello.cpp という1行で、
プリプロセッシング→コンパイル→アセンブル→リンク
のすべてが自動で実行されます。
コンパイルエラーとランタイムエラー
コンパイルエラーとランタイムエラーは別物です:
| エラーの種類 | 発生時点 | 原因 | 例 |
|---|---|---|---|
| コンパイルエラー | コンパイル時 | 文法が間違っている | 括弧の忘れ、変数の型ミス |
| ランタイムエラー | 実行時 | ロジックが間違っている | 0で割る、範囲外アクセス |
コンパイルエラーはコンパイラが教えてくれます。 ランタイムエラーは自分で見つける必要があります。
ポイント
- C++はコンパイル言語。実行前にコンパイルが必須
- コンパイルとは、ソースコード → 実行ファイルへの変換
- コンパイラが文法エラーをチェックしてくれる
- コンパイルに成功 = 文法は正しい(ロジックが正しいとは限らない)
よくある誤り
誤解: 「コンパイルエラー = プログラムが悪い」
コンパイルエラーは文法の誤りです。 修正すればOKです。初心者は最初、 エラーの読み方に戸惑いますが、 慣れれば自動修正できるようになります。
// コンパイルエラーの例
int main { // ← () がない!
return 0;
}
// エラーメッセージ:
error: expected '(' before '{' token
やってみよう
練習1: コンパイルの4つのステップの名前を言ってみてください。
練習2: コンパイルエラーとランタイムエラーの違いを説明してください。
チャレンジ: 以下のコードをコンパイルするとどうなるでしょう?理由も考えてみてください。
int main() {
int x = "hello"; // ← 数値型に文字列を代入
return 0;
}
答え
コンパイルエラーになります。 型が合致していないため、コンパイラが検出してくれます。
まとめ
- C++プログラムを実行するにはコンパイルが必須
- コンパイルは、ソースコードを実行ファイルに変換する処理
- コンパイルは4つのステップで構成(プリプロセッシング、コンパイル、アセンブル、リンク)
- コンパイルエラーは修正可能。落ち着いてエラーメッセージを読もう