osdev-jpでは、OS開発に有用な情報を収集し公開しています

View My GitHub Profile

C++17によるプログラミング入門

本書はプログラミングに入門する人のためのものです.C++の最新規格であるC++17を用いてプログラミング入門をします.

なぜ C++ なのか

この節は読み飛ばして大丈夫です.C++を入門言語として選んだ理由が気になる人はお読みください.

C++はとても大きな規格を持つ複雑な言語です.なぜそんな言語を「プログラミング入門言語」として採用しようと思ったのか.それは,C++は進化するにしたがって複雑度は増しているのは事実ですが,機能を絞って説明すれば入門用言語としての教えやすさも伸びていると筆者が考えているからです.

C++の言語仕様が複雑になっているのは,C++が「オーバーヘッドを可能な限り小さくする」ことを目指しているからです.その目標と,実用的なプログラミングができるように言語機能やライブラリを充実させるという目標を両方追求するために,どうしても言語仕様が肥大化するのです.言い換えれば,C++は非常に効率的に動作するプログラムを簡単に書けることを目指した意欲的な言語なのです.そんな意欲的な言語,学んでみたいと思いませんか?

C++のすべての機能を把握するのは非常に大変ですから,本書では入門者が覚えておくべき項目に絞ってC++を説明します.

Hello, world!

プログラミング入門といえば,最初は「画面にメッセージを出す」プログラムを作ります.「Hello, world!」と画面に出すので,ハローワールドプログラムなどと呼ばれます.ごく基本的なプログラムですが,これを作ることで,開発環境が正しくセットアップされていること,作成したプログラムがきちんと起動することを確かめることができます.

次の通りエディタに入力し,適当な場所に適当なファイル名で保存してください.ここでは$HOME/workspace/hello.cppという名前で保存したとします.

リスト1.1 はじめてのC++プログラム

#include <iostream>

int main() {
  std::cout << "Hello, world!" << std::endl;
  return 0;
}

このファイルをコンパイルして実行ファイルを生成します.

$ cd $HOME/workspace
$ clang++ -std=c++17 -Wall -o hello hello.cpp

何もエラーがでなければ成功です.成功するとhelloという実行ファイルが生成されます.実行してみましょう.

$ ./hello
Hello, world!

画面に「Hello, world!」と出れば成功です.

…画面と書きましたが,標準出力(Standard Output)と言う方が正確です.なぜなら,リダイレクトというシェルの機能を使うことで画面ではなくファイルに出力させることができるからです.

$ ./hello > h.txt
$ cat h.txt
Hello, world!

1行目で> h.txtとしている部分がリダイレクトです.標準出力を,画面ではなくh.txtという名前のファイルに向けるという意味になります.この知識はC++というよりはシェルの使い方の知識なのですが,プログラミングによって作ったツールの応用範囲を広げるためにシェルにも慣れると良いでしょう.

プログラムの説明

ハローワールドプログラムの6行のソースコードに説明を加えます.初めてのプログラムですので一字一句に対してしっかり説明します.ちょっと長くなりますが,頑張って付いてきてください.

細かく説明してしまいました.要点をまとめると,メッセージの出力はstd::coutででき,メッセージ出力処理に対してmainという名前を付けている,ということです.

C++プログラムはmain関数から処理が開始されることになっています.ハローワールドプログラムを起動させるとメッセージが表示されたのはそのためです.どこにもmainを実行せよというような記載はありませんが,コンパイラが自動的にそうなるようにしています.

クイズ

出力されるメッセージを改造してみましょう.複数行の表示にも挑戦してみてください.

*1: 関数は元々は数学用語だが,数学とC++の関数は表すものがかなり異なる.