clang 3.1をWindowsで使ってみた
次期C++BuilderのC++コンパイラがLLVM/clangになる*1というので、早速いじってみた。
まずはインストール。現時点でWindows上でclangを動かすにはmingwが必要とのことで、まずはmingwのインストール。
- http://sourceforge.net/projects/mingw/files/Installer/mingw-get/catalogue/からDownload mingw-get-inst-20120426.exeをクリック。
- ダウンロードしたインストーラーを実行してmingwをインストール。
続いて、LLVMのインストール。LLVMのダウンロードページからWindows用のバイナリをダウンロード。
ダウンロードしたアーカイブを解凍して、mingwのインストール先に上書き。
以上で、Windows上でclangがインストールされる。
コンパイルは以下の感じ。ネタはC++11でサポートされたラムダ式を使ってFizzBuzz問題を解いてみる。
#include <tchar.h> #include <stdlib.h> #include <algorithm> #include <iostream> #include <vector> #include <iterator> class CFizzBazz { private: class Incl { public: Incl() : m_cnt(1) { } int operator() () { return m_cnt++; } private: int m_cnt; }; public: CFizzBazz(int max) { std::vector<int> v; std::generate_n(std::back_inserter(v), max, Incl()); std::for_each(v.begin(), v.end(), [](int num) { if (num % 3 == 0 && num % 5 == 0) { std::cout << "FizzBazz"; } else if (num % 3 == 0) { std::cout << "Fizz"; } else if (num % 5 == 0) { std::cout << "Bazz"; } else { std::cout << num; } std::cout << std::endl; }); } }; int _tmain(int argc, _TCHAR* argv[]) { CFizzBazz fizzBazz(_ttoi(argv[1])); return 0; }
スタートメニューから[MinGW|MinGW Shell]を選択してコマンドラインシェルを起動。
コマンドラインから以下を入力。
$ clang -std=c++11 fizzbuzz.cpp -o fizzbuzz.exe -lstdc++
clangの最大の特徴として、エラーメッセージが非常に見やすいってのがある。C++の欠点としてテンプレートとか使うとエラーメッセージがわけわかめになるのがあるけど、それが解消されている。C++11の準拠度もかなり高い感じだし、古いコンパイラを捨てて、clangに移行するのはいい決断ではないかと。