M.Hiroi's Home Page

Linux Programming

お気楽C++プログラミング超入門

[ Home | Linux ]

WHAT'S NEW


お気楽C++プログラミング超入門

CONTENTS

●初級編

●中級編

●応用編

●Yet Another C++ Problems


はじめに

『お気楽C++プログラミング超入門』は M.Hiroi が Linux でC++を学習するために作成したページです。昔々、M.Hiroi はC++を少しだけかじったことがありますが、難しくて歯がたちませんでした。その後ぜんぜん勉強していなかったので、今では初心者とまったく同じような状態です。

そこで、今回は脱初心者を目指して、簡単なプログラムを作りながら少しずつC++の勉強を進めていきたいと思っております。なにぶんにも初心者が作るページなので、間違いがあるかもしれません。お気づきの点がありましたら、メールでご指摘いただけると助かります。たいしたことはできませんが、よろしければお付き合いくださいませ。

●C++とは?

C++は 1982 年 AT&T ベル研究所の Bjarn Stroustrup 氏によって開発された、C言語にオブジェクト指向機能を追加したプログラミング言語です。現在、最も多く利用されているプログラミング言語の一つです。オブジェクト指向だけではなく、テンプレートによるジェネリック・プログラミングなどもサポートされています。

C++は度重なる機能追加により、その言語仕様はとても複雑になってしまいました。このため、初心者がオブジェクト指向を学ぶには適していないと言われています。M.Hiroi はシンプルな言語を好むので、C++は難しい言語だと思っております。まあ、C++はなんでもできるプログラミング言語、いわゆるプロフェッショナルツールなので、M.Hiroi のようなちょっと勉強しただけの初心者では、歯がたたないのは当然のことなのかもしれません。

●g++ と clang++

Unix 系 OS で利用できるC++コンパイラでは、Free Software Foundation が開発している g++ が有名です。Debian 系の OS であれば、次のコマンドで g++ をインストールすることができます。

sudo apt intstall g++
$ g++ --version
g++ (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

近年では Clang というコンパイラも使われるようになってきました。M.Hiroi は Clang に興味があるので、本ページでは Clang を使ってC++の学習を進めることにします。Debian 系の OS であれば、次のコマンドで Clang をインストールすることができます。

sudo apt intstall clang

Cコンパイラ (clang) といっしょにC++コンパイラ (clang++) もインストールされます。

$ clang --version
Ubuntu clang version 14.0.0-1ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

$ clang++ --version
Ubuntu clang version 14.0.0-1ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

コマンドは g++ のかわりに clang++ を使います。なお、Clang は Cygwin でも利用することができます。setup-x86_64.exe で簡単にインストールすることができるので、Cygwin ユーザーで興味のある方は試してみてください。

●たらいまわし関数

それでは、お馴染みの「たらいまわし関数」を使って、g++ と clang++ の実行時間を計測してみましょう。C++の場合、たらいまわし関数は次のようになります。

リスト : たらいまわし関数 (tak.cpp)

#include <iostream>
using namespace std;

int tak(int x, int y, int z)
{
  if (x <= y) {
    return z;
  } else {
    return tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y));
  }
}

int main()
{
  cout << tak(24, 12, 0) << endl;
}

時間計測はコマンド time を使います。time で時間を計測する場合、プログラムの起動時間も含まれることに注意してください。実行結果は次のようになりました。

$ clang++ -O2 tak.cpp
$ time ./a.out
1

real    0m8.110s
user    0m8.100s
sys     0m0.010s

$ g++ -O2 tak.cpp
$ time ./a.out
1

real    0m8.102s
user    0m8.102s
sys     0m0.000s

最適化のオプションはどちらも -O2 を指定しました。clang++ と g++ で実行速度に大きな差はないようです。興味のある方はいろいろ試してみてください。


参考文献, URL

  1. Bjarne Stroustrup (著), 『プログラミング言語C++ 第 3 版』, アジソンウェスレイ, 1998
  2. Scott Meyers (著), 吉川邦夫 (訳), 『Effective C++ 改訂 2 版』, 株式会社アスキー, 1998
  3. Scott Meyers (著), 安村通晃,伊賀聡一郎, 飯田朱美 (訳), 『More Effective C++』, アジソンウェスレイ, 1998
  4. Margret A. Ellis, Bjarne Stroustrup (著), 足立高徳, 小山裕司 (訳),『注釈C++リファレンスマニュアル』, アジソンウェスレイ・トッパン, 1992
  5. Patrick Henry Winston (著), 鬼頭繁治 (訳), 『ウィンストンのC++』, アジソンウェスレイ, 1995
  6. Ravi Sethi (著), 神林靖 (訳), 『プログラミング言語の概念と構造』, アジソンウェスレイ, 1995
  7. C++ - Wikipedia
  8. C++11 - Wikipedia
  9. cpprefjp - C++日本語リファレンス

『お気楽C++プログラミング超入門』の著作権は筆者「広井誠 (Makoto Hiroi)」が保持します。無断使用や無断転載は禁止いたします。『お気楽C++プログラミング超入門』で作成したプログラムはフリーソフトウェアとします。ご自由にお使いください。プログラムの改造や配布もご自由にどうぞ。その際は出典を明記してくださるようお願いいたします。

ただし、ドキュメントの内容とプログラムは無保証であり、利用したことにより生じた損害について、作者「広井誠 (Makoto Hiroi)」は一切の責任を負いません。また、これらのプログラムを販売することで利益を得るといった商行為は禁止いたします。

Copyright (C) 2015-2023 Makoto Hiroi
All rights reserved.

[ Home | Linux ]