M.Hiroi's Home Page
http://www.geocities.jp/m_hiroi/

Linux Programming

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

[ Home | Linux ]

WHAT'S NEW


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

CONTENTS


はじめに

『お気楽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-get intstall g++
mhiroi@mhiroi-VirtualBox:~/cpp$ g++ --version
g++ (Ubuntu 4.9.1-16ubuntu6) 4.9.1
Copyright (C) 2014 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 に興味があるので、本稿ではC++コンパイラに Clang を使ってC++の学習を進めることにします。Debian 系の OS であれば、次のコマンドで Clang をインストールすることができます。Cコンパイラ (clang) といっしょにC++コンパイラ (clang++) もインストールされます。

sudo apt-get intstall clang
mhiroi@mhiroi-VirtualBox:~/cpp$ clang++ --version
Ubuntu clang version 3.5.0-4ubuntu2 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
Target: i386-pc-linux-gnu
Thread model: posix

コマンドは g++ のかわりに clang++ を使います。なお、Clang は Cygwin でも利用することができます。setup.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 で時間を計測する場合、プログラムの起動時間も含まれることに注意してください。実行結果は次のようになりました。

mhiroi@mhiroi-VirtualBox:~/cpp$ clang++ -O2 -o tak tak.cpp
mhiroi@mhiroi-VirtualBox:~/cpp$ time ./tak
1

real       0m10.951s
user       0m10.932s
sys        0m0.000s
mhiroi@mhiroi-VirtualBox:~/cpp$ g++ -O2 -o takg tak.cpp
mhiroi@mhiroi-VirtualBox:~/cpp$ time ./takg
1

real       0m11.936s
user       0m11.904s
sys        0m0.004s

最適化のオプションはどちらも -O2 を指定しました。clang++ のほうが少しだけ速いようです。興味のある方はいろいろ試してみてください。


参考文献, 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 Makoto Hiroi
All rights reserved.

[ Home | Linux ]