2012年8月31日金曜日

C++11が使いたい "その2"

Clang3.1 Hello auto

 実はHelloWorldのコンパイルもすんなりとは通らなかった。
clangもC++のコンパイルはclang++で行うこと、後はlibgcc_s_dw2-1.dllにパスが通っていないなかった、などということで手間取った。

 libgcc_s_dw2-1.dllはMinGW/binに入っていたが、MSYSを通して色々なものが動作していたらしく、パスが通っていなかったのだ。副作用でEclipseで作った実行ファイルが動くようになった。今までGCCでコンパイルしたファイルは動いていたのだから、分からない話だ。

 そうして遂にC++11のコンパイルが可能となった。最も簡単な機能はなんだろう。最初に思いついたのは auto であった。null_ptr の方が簡単だったが、思いつかなかった。HelloWorldプログラムに追加して、もはや何がハローなのか分からないプログラムにしてみる。

#include <iostream>
#include <string>
#include <vector>

int main(int argc, char* argv[])
{
    std::vector<std::string> str_list;

    for(int i=0; i<2 i++)
    {
        std::string temp;
        std::cin >> temp;
        str_list.push_back(temp);
    }

    std::cout << "Hello " << std::endl;

    for(auto iter=str_list.begin();
        iter!=str_list.end();
        ++iter)
    {
        std::cout << *iter << std::endl;
    }
    
    return 0;
}

 さて、重要なのはこれをメモしておくことだ。clangでC++11の機能を有効化してコンパイルするには、次のコンパイルオプションを指定する必要ある。
-std=c++11 もしくは -std=gnu++11

ついでに、実行ファイルを作るには
clang++ -std=c++11 HelloWorld.cpp -o HelloWorld

 このままじゃC++11は使えないからオプション指定してね、というようなエラーメッセージは出るのだが、どうしてか、そのものズバリは教えてくれない。


0 件のコメント:

コメントを投稿