Arduino をプログラミングするときにC++11を使用するにはどうすればよいですか?
Arduino IDE または別の環境を使用しても問題ありません。私が最も興味を持っているのは、標準ライブラリの変更が必要なことではなく、コア言語の改善です。
バージョン 1.6.6以降、Arduino IDE はデフォルトで C++11 を有効にします。
古いバージョンについては、以下をお読みください。
アセンブラー、コンパイラー、リンカー、アーカイバーなど、ツールチェーンのあらゆる要素のフラグを変更するのは非常に簡単です。
Arduino IDE バージョン 1.5.7 (2014 年 7 月リリース) でテスト済み、
例えば、
Arduino IDE バージョン 1.5.7 および 1.5.8 でテストされたC++11 (C++0x) のサポートを有効にするには、次の行の末尾にフラグ「-std=gnu++11」を追加するだけです。 compiler.cpp.flags=" を使用します。
近い将来、Arduino IDEで C++11 がデフォルトで有効になる予定です。ただし、バージョン 1.5.8 (2014 年 10 月) の時点ではまだそうではありません。
まず、GCC 4.7 以降 (したがって AVR-GCC 4.7 以降) のみが C++11 をサポートします。したがって、次のようにインストールされているバージョンを確認してください。
gcc --version
avr-gcc --version
AVR-GCC が 4.7 以上の場合、C++11 を使用できる可能性があります。
Arduino IDE は、カスタム コンパイラ フラグをサポートしていません。これはリクエストされましたが、まだ実装されていません。
そのため、他の環境を使用するか、コマンド ラインからプログラムを直接コンパイルする必要があります。
AVR-GCC を使用してコマンド ラインから直接コンパイルする場合は、C++11 サポートを有効にするためのコンパイラ フラグを追加するだけです。
-std=c++11
特定の開発環境では、ほとんどの場合、IDE 内のビルド オプションからのコンパイラ フラグの編集がサポートされます。上記のフラグは、各環境のフラグのリストに追加する必要があります。
C++0xは、C++11 標準のワーキング ドラフトの名前でした。C++0x のサポートは、GCC 4.3 以降で利用できます。ただし、これは厳密に実験的なサポートであるため、C++11 機能が存在することを確実に期待することはできません。GCC の対応するバージョンで利用可能な機能の完全なリストを次に示します。AVR-GCC で使用できる機能は、対応する GCC バージョンで使用できるものと同じです。
C++0x のコンパイラ フラグは次のとおりです。
-std=c++0x