コース目次 / 第2章
最初の実行 — 翻訳してから走らせる
ソースを実行ファイルに翻訳して、それを動かす、という2段階を身につけます。
Compiler Explorer では自動で翻訳されていました。手元では自分でやります。
ミニ解説: 2段階になる
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 でなくて構いません。Windowsの w64devkit には vim が付いてきますので、そのまま使えます。VS Code を使うなら code 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 をお使いの方
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
Windows をお使いの方
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
何も出なければ成功です。C++のコンパイラは、うまくいったときは黙っています。
| 部分 | 意味 |
|---|---|
-std=c++17 |
C++17という版の決まりで読む。版を書かないと古い既定になることがあります |
-Wall -Wextra |
気になるところを全部言って。このコースでは必ず付けます |
-o hello |
できあがりの名前を hello にする(付けないと a.out になります) |
hello.cpp |
材料 |
-Wall -Wextra を最初から癖にしてください。C++は「書いた人が正しいと信じる」言語なので、黙って通ってしまう危うい書き方がたくさんあります。その多くは、この2つを付けるだけで警告として出てきます。
3. 走らせる
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
1 回目: こんにちは、はるとさん
2 回目: こんにちは、はるとさん
3 回目: こんにちは、はるとさん頭の ./ は「いまいるフォルダの、これ」という意味です。省くと「見つかりません」と言われます。
そしてこの hello というファイルが、あなたの最初の成果物です。C++が入っていないパソコンでも、同じOSなら動きます。
4. 書き換えて、もう一度
はると を自分の名前に変えて保存してください。そして——
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
変わりません。
ここがコンパイル言語のいちばんの慣れどころです。書き換えたのは hello.cpp(材料)で、動かしているのは hello(翻訳済みのもの)。翻訳し直さないと反映されません。
コンパイル → 実行を、いつも2つセットで打つ癖をつけてください。
Mac をお使いの方
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
Windows をお使いの方
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
もう一度 ./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章です。
この章はまだ完了していません。
保存できませんでした(プライベートブラウズ中かもしれません)。この端末に進捗は残りませんが、先へは進めます。