- ベストアンサー
Cだけ? C++が有利?
マイコンのプログラミングでC++を使うことは、Cのみでのプログラミングよりも有効ですか? マイコンは16ビットCPUで、ROM256K、RAM4K程度、OSレスです。 もし、有効であれば、どのようなところでC++を使うことに優位性があるのでしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
外部とやりとりをするようなディバイスが存在する場合、そして、それが少しずつ違って複数存在する場合。 たとえば、小さな LCD 表示器を数種類使い分けているとか、いう場合に、その差異、をクラスという形で吸収できるのでこの場合は有効です。 また、きちんとオブジェクト指向の設計ができれば、設計ツールとの親和性はC++のほうが上です。 C++(に限らず、オブジェクト指向)の場合、メインルーチンは同じで、部品だけ取り替えるという設計が容易になります。 上記のような具体的なディバイスでなくても、ソフトウエア上の機能的なモジュールを「中身は違っても使い方は同じ」に作ることが容易になります。 つまり、数種類の LCD に「出力」するのに、メインの処理からは同じコードで書くこともできるようになります。 このあたり、オブジェクト指向という側面からアプローチしてみると有用かと思います。 また、C++はCに比べて、メモリ等多く消費すると思われがちですが、実際には大きな差はありません。 C++の「仮想なんとか」という機能を使わなければ、関数呼び出しに引数が一つ増える程度のオブジェクトができあがります。C++の特徴として、オブジェクト指向的でありながら、資源を使いそうな機能は切り捨てる or オプションにする(だから、C++の「仮想なんとか」はいちいち、 virtual というのを指定しなければならない)という方針で作られているので、速度的にも遜色はありません。 逆に、仮想的な機能を使うべき側面というのは、Cで書けば、同じような関数が山ほどできてしまうところになります。 正しく使えば、C++は組み込みでも有効です。 また、当然のことながら、組み込み開発用のC++はROM化が前提の設計になっています。
その他の回答 (6)
- yphkz4063
- ベストアンサー率23% (34/144)
>マイコンのプログラミングでC++を使うことは、Cのみでのプログラミングよりも有効ですか? ROM化してもちゃんと動くのであれば、それなりの意味はあると思います。 でも、特にC++はROM化しても容易に動作するとは思えないです。 >もし、有効であれば、どのようなところでC++を使うことに優位性があるのでしょうか? C++のほうが言語の仕様が優位であると、一応は言えると思います。 でも、CとC++はちょっと似ているだけで別物ですから比較しても見返りないです。
お礼
CとC++は、比較する対象ではないということ・・・肝に銘じておきます。 Cで十分な現状ですが、C++にすることで、何か新しい事でも起こるかと期待していたもので・・・。
- Situgyosya
- ベストアンサー率41% (21/51)
ハードのスペックからみるとC言語でも冗長にすぎるかもしれません。 コンパイラにアセンブラコードを出力させて最適化しましょう。 C++の場合、ASMコード上の識別子が一定のルールで変更されるので、 なれるまで戸惑うかもしれません。
お礼
マシン語で最適化するほどではありません。 また、Cでアセンブラコードを出力させて最適化するくらいなら、最初からマシン語で書きます。
- titokani
- ベストアンサー率19% (341/1726)
C++コンパイラを使っていても、Cとまったく同じコードを出力させることは可能です。 なので、速度が要求される部分ではC的に、そうでない部分はC++的に書くことで開発効率をあげることは可能でしょう。 ただ、C++でどのように書いたら、Cと同様なコードが出力されるのか、あるいはCよりも大きなコードが出力されてしまうのか、そのあたりに精通している必要がありますね。 もし、そのあたりに精通していないのであれば、最初からCのみで書いたほうが、無難かもしれません。
お礼
非常に小さなシステムでは、C++がCを超える要素が見当たらなくなりました。 Cで行こうと思います。
- f_attck
- ベストアンサー率33% (40/118)
C++に優位性があるとすれば、開発工数やコードの可読性ですが、 初期開発においては、この限りではありません。 既にフレームワークとして何らかのものがあるのであれば 飛躍的に開発工数は下がります。 また、C++の場合はコーディングというよりは設計工数が非常に 大きく、技術者スキルも要するために思ったように進捗が上がらない といった自体も想定する必要があります。 C言語でもそうですが、オブジェクトチックに組んでいくと どうしても、オブジェクト自体が汎用性を持たせた設計となるため 速度的には圧倒的に不利です。 特にマイコンの場合で、速度を要求されるシーンではC, C++に かかわらず、オブジェクトチックなコーディングはできないでしょう 昔ながらのドライバのような組み方をしなければ、パフォーマンス はでないからです。 そういう意味からいくと、速度を要求されないシーンではC++を 選択する余地が出てくる。 余地があるからと言ってC++決定ではなく、既存のフレームワークが あるのであれば、採用の可能性は高いだろうし、初期開発の場合で あれば、今後の開発において流用の可能性があるのであれば、事前 投資という意味合いで選択するというのも一つの手段と思います。 あとは、最終的にできるバイナリサイズがROM領域を圧迫するようで あれば、C++選択の可能性は、さらに下がることになります。
お礼
スピード・サイズ共々、C++にするメリットが薄れてきました。 Cだけで行こうと思います。
- Tacosan
- ベストアンサー率23% (3656/15482)
「C++ as better C」ということで, 例えば厳密な型チェックやオーバーロードまわりに限定すれば便利かもしれませんね. 例外やポリモルフィズム, template などは無理だと思いましょう.
お礼
型チェックは、綿密に行う予定です。 本体自身では、あまりメリットが無いと考えて良いようですね。
- jacta
- ベストアンサー率26% (845/3158)
RAMが4K程度であれば、C++を使うメリットよりデメリットの方が大きくなる可能性があります。 仮に使うとしても、フルセットのC++ではなく、少なくとも例外処理ぐらいはなくした方がよいでしょう。
お礼
噂には聞いていましたが、C++のコードは、メモリの消費が激しいのですね。 C++は、使わない方向で考えます。
お礼
C++を使うメリットをありがとうございました。