要約
このレッスンでは、コースが最後まで従う作業のしかたを定める。編集・保存・コンパイル・実行・読むという作業の流れを述べ、誤りはできるだけ早い段階で見つけるのが得策である理由を説明する。コースが推奨するコンパイルのコマンドと、その各オプションの働きを示す。ターミナルでこの流れを回す方法と、同じオプションでコンパイルするように Visual Studio Code を設定する方法を示す。コンパイラの出力の中でエラーと警告を見分け、それらが指す行を突き止める方法を教える。サニタイザを紹介する。サニタイザは、プログラムがある種の未定義動作に陥ったときにプログラムを止め、その行を示す。最後に、日本語の文字を正しく表示できるようにコンソールを整える。
学習目標
- コースのオプション(
-std=c++23 -Wall -Wextraとその他)を付けてターミナルからプログラムをコンパイルし、-oで実行ファイルに名前を付けて実行する。 - ターミナルと同じオプションでコンパイルし、警告を問題パネルに表示するように Visual Studio Code を設定する。
- コンパイラの出力の中でエラーと警告を見分け、各警告を出したオプションを挙げ、警告が指す行を突き止める。
- メモリエラーのサニタイザと未定義動作のサニタイザを有効にし、そのレポートから失敗の種類と、失敗が起きた行を読み取る。
- 出力に日本語の文字の代わりに奇妙な記号が表示される理由を診断し、文字が正しく表示されるようにエディタとコンソールを設定する。
作業の流れ
プログラムを書くことは一度きりの行為ではなく、一回の作業の中で何十回も繰り返される循環である。それには五つの段階がある。ソースコードを編集する。ファイルを保存する。コンパイラが読むのはディスクであって、エディタの画面ではないからである。コンパイルする。つまり、ファイルを実行ファイルに翻訳するようコンパイラに頼む。結果を実行する。そして、コンパイラとプログラムが書き出したものをすべて注意深く読む。読んだことが新たな編集につながり、流れはまた始まる。
最後の段階は最もおろそかにされ、しかも最も重要である。前提は単純である。欠陥は、見つかるのが遅いほど直すのに費用がかかる。コンパイラが指摘すれば、どの行か、そしてほとんどの場合なぜかがわかる。実行時に現れれば、何かがうまくいかなかったことしかわからない。何週間も後に別のデータで現れれば、原因は誰にもわからずじまいになるかもしれない。ここから、欠陥はできるだけ早く見つけるのが得策であり、コンパイラはプログラムの最初のチェック役として扱うべきだということが導かれる。疲れを知らない読み手であり、正しく設定すれば、打ち間違いよりはるかに多くのことを知らせてくれる。
このレッスンでは、このチェック役を三つの段階で設定する。実行ファイルを得ることを妨げるエラー、実行ファイルは得られるが疑わしいコードを指摘するコンパイラの警告、そして実行中のプログラムを見張るサニタイザである。コンパイラとエディタはインストール済みとする(レッスン 1.3)。例では変数と if 文を使うが、これらはレッスン 2.1 とレッスン 4.1 で説明する。ここでは読めれば十分である。
コンテンツを読み込んでいます…