Embedded C++について

Home > 2005-07 / より良いC > This Entry [com : 0][Tb : 0]

2005-07-28

 いまいち盛り上がりに欠けるEmbedded C++(EC++)ですが、一体どんなものなのか見ておくことにしたいと思います。

 EC++は標準C++のサブセットを目指した規格で、以下の内容にポイントを置いて言語仕様が策定されたようです。*1



具体的には以下の仕様が削除されています。



さらには、テンプレートが削除されたことで、STLをはじめとする標準C++ライブラリの大多数が削除されることになりました。結果として、C++の黎明期とさほど変わらないような状態まで、言語仕様がコンパクトになっています。



 EC++か標準C++かの判別は、__embedded_cplusplusマクロの定義状態で判別することができます。EC++は標準C++のサブセットを目指していましたが、現実には互換性のない部分がかなりあります。そのため、両方に対応するコードを書くには、条件付コンパイルが必須です。

まず、EC++は名前空間がサポートされていないため、ライブラリ機能を使おうとするとシンタックスに一貫性がなくなります。例えば、標準C++ではstd::size_tと書きますが、EC++は単にsize_tと書かなければなりません。<stddef.h>をインクルードしようにもEC++ではサポートされていません。

次に、組み込み環境の多くはフリースタンディング環境に該当しますが、標準C++ではサポートされないライブラリの多くがEC++ではサポートされています。つまり、EC++で実装されたコードをそのまま標準C++に持っていっても、ライブラリが不足しているために使えないのです。

最後に、EC++は例外処理機構をサポートしていないため、EC++で実装されたコードは例外安全をはじめとする例外処理の影響に配慮されていないと思われます。したがって、そうしたコードを標準C++に持っていっても、信頼性に大きな問題があります。

 このように、EC++は標準C++のサブセットであると考えるより、まったく別の言語だと考えた方がよさそうです。テンプレートと例外処理を使うつもりがないのであれば、「より良いC(better C)」として使うには、手軽で便利な言語であるといえます。


*1 EC++ Japanese Home Page - language_specより引用。

Comment

Post a Comment









管理者にだけ表示を許可

Trackback

http://cppemb.blog17.fc2.com/tb.php/12-33605714

C++と組み込み環境 | Page Top▲

New >>
インライン関数再考
<< old
例外処理とその影響
ブログ内検索
RSSフィード