コース目次 / 第2章

最初の実行 — 翻訳してから走らせる

ソースを実行ファイルに翻訳して、それを動かす、という2段階を身につけます。

第2章 / 全5章目安 約25分この章のゴール: 自分で書いた .cpp から実行ファイルを作って動かせる
お使いのパソコン
手順が切り替わります
お使いのエディタ
ファイル操作が切り替わります

Compiler Explorer では自動で翻訳されていました。手元では自分でやります。

ミニ解説: 2段階になる

C++の「保存 → 実行」
1. あなたが書く          hello.cpp        (ただの文字)
        │
        │  コンパイル(clang++ / g++)
        ▼
2. 機械が読める形       hello            (実行ファイル)
        │
        │  実行(./hello)
        ▼
3. 動く                 画面に文字が出る

PythonやRubyは1と3だけでした。C++は2が挟まります。そのかわり、できた2は単体で配れます。

1. 書く

VS Code をお使いの方

VS Code で kazuate フォルダを開き、「新しいファイル」から hello.cpp を作ります。拡張子 .cpp まで正確に入力してください。

ターミナル派の方

kazuate フォルダの中で、エディタに新しい名前を渡します。

ターミナル
nvim hello.cpp

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

エディタは nvim でなくて構いません。Windowsの w64devkit には vim が付いてきますので、そのまま使えます。VS Code を使うなら code hello.cpp です。

hello.cpp
#include <iostream>
#include <string>

int main() {
    std::string namae = "はると";
    int kaisuu = 3;

    for (int i = 1; i <= kaisuu; i++) {
        std::cout << i << " 回目: こんにちは、" << namae << "さん" << std::endl;
    }

    return 0;
}

2. 翻訳する

Mac をお使いの方

VS Codeのターミナルターミナル
clang++ -std=c++17 -Wall -Wextra -o hello hello.cpp

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

Windows をお使いの方

VS Codeのターミナルターミナル
g++ -std=c++17 -Wall -Wextra -o hello hello.cpp

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

何も出なければ成功です。C++のコンパイラは、うまくいったときは黙っています。

部分 意味
-std=c++17 C++17という版の決まりで読む。版を書かないと古い既定になることがあります
-Wall -Wextra 気になるところを全部言って。このコースでは必ず付けます
-o hello できあがりの名前を hello にする(付けないと a.out になります)
hello.cpp 材料

-Wall -Wextra を最初から癖にしてください。C++は「書いた人が正しいと信じる」言語なので、黙って通ってしまう危うい書き方がたくさんあります。その多くは、この2つを付けるだけで警告として出てきます。

3. 走らせる

VS Codeのターミナルターミナル
./hello

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

こう出る
1 回目: こんにちは、はるとさん
2 回目: こんにちは、はるとさん
3 回目: こんにちは、はるとさん

頭の ./ は「いまいるフォルダの、これ」という意味です。省くと「見つかりません」と言われます。
そしてこの hello というファイルが、あなたの最初の成果物です。C++が入っていないパソコンでも、同じOSなら動きます。

4. 書き換えて、もう一度

はると を自分の名前に変えて保存してください。そして——

VS Codeのターミナルターミナル
./hello

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

変わりません。

ここがコンパイル言語のいちばんの慣れどころです。書き換えたのは hello.cpp(材料)で、動かしているのは hello(翻訳済みのもの)。翻訳し直さないと反映されません。
コンパイル → 実行を、いつも2つセットで打つ癖をつけてください。

Mac をお使いの方

VS Codeのターミナルターミナル
clang++ -std=c++17 -Wall -Wextra -o hello hello.cpp

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

Windows をお使いの方

VS Codeのターミナルターミナル
g++ -std=c++17 -Wall -Wextra -o hello hello.cpp

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

もう一度 ./hello。今度は変わります。

こわしてみる

行末の ; を1つ消して、コンパイルしてみてください。

Mac をお使いの方

コンパイラの言い分
hello.cpp:9:90: error: expected ';' after expression
    9 |         std::cout << i << " 回目: こんにちは、" << namae << "さん" << std::endl
      |                                                                                ^
      |                                                                                ;
1 error generated.

Windows をお使いの方

コンパイラの言い分
hello.cpp: In function 'int main()':
hello.cpp:9:80: error: expected ';' before '}' token
    9 |         std::cout << i << " 回目: こんにちは、" << namae << "さん" << std::endl
      |                                                                                ^
      |                                                                                ;
   10 |     }
      |     ~

Macとは文面が少し違います。Windowsで使う g++ と Macの clang++ は別のコンパイラなので、言い方が変わります。指している場所は同じです。

ファイル名・行番号・列番号、そして「ここに ; を入れよ」まで出ています。C++のエラーは長くなりがちですが、読むのは最初の error: の行と、その下の矢印だけで足ります。
そして大事なこととして、エラーは上から直してください。1つ目のエラーが2つ目以降を引き起こしていることがとても多く、上を直すと下がまとめて消えます。

ハマったら

「no such file or directory: ./hello」と出る

コンパイルが失敗しているか、-o hello を書き忘れています。ls を打って hello があるか確かめてください。a.out があれば、-o を書き忘れたということです。

Windowsで文字化けする

このコースのコードには、Windowsのときだけ文字コードを揃える行が入っています(第3章で出てきます)。それでも化けるときは、w64devkit.exe の窓ではなく Windows Terminal から起動してみてください。

エラーが何十行も出て読めない

いちばん上だけ読んでください。C++のコンパイラは、1つの間違いから連鎖してたくさん言うことがあります。上を1つ直して、もう一度コンパイルするのが最短です。

ZIPで戻したい

このページの下のZIPは、この章を終えた状態のフォルダです。解凍して、その中で作業を続けられます。自分で書き換えた部分は消えてしまうので、先に自分のファイルを別の場所へ待避してから使ってください。

こうなっていればOK

うまくいかないときは、この章の完成ファイル一式(ZIP)をダウンロードして続きから進めても大丈夫です。

卒業まであと2章です。

この章はまだ完了していません。