[解決済み] 組込み開発でC++ではなくCを使う理由はありますか?[クローズド]
2023-04-02 03:02:16
質問
質問
私のハードウェアには、C++とC89の2つのコンパイラがあります。
私は、ポリモーフィズムなしで(vtables を避けるために)クラスを持つ C++ を使おうと思っています。 私が C++ を使いたいと思う主な理由は次のとおりです。
- 私は、マクロ定義の代わりに「インライン」関数を使用することを好みます。
- プレフィックスがコードを散らかすので、名前空間を使いたい。
- 私は、主にテンプレートと冗長なキャストのために、C++が少し型安全であると見ています。
- 私はオーバーロードされた関数とコンストラクタ(自動鋳造のために使用)が本当に好きです。
非常に限られたハードウェア(4kbのRAM)のために開発するとき、C89に固執する理由がありますか?
結論
ご回答ありがとうございました!本当に助かりました。
よく考えたら、主にCにこだわってみます。
- C 言語では実際のコードを予測することが容易で、これは RAM が 4kb しかない場合には本当に重要です。
- 私のチームは主に C の開発者で構成されているので、高度な C++ 機能は頻繁に使用されないでしょう。
- 私の C コンパイラー (C89) で関数をインライン化する方法を発見しました。
たくさんの良い答えを提供していただいたので、1つの答えを受け入れるのは難しいです。 残念ながらwikiを作って受け入れることはできないので、私が最も考えさせられた答えを1つ選びます。
どのように解決するのですか?
C++ではなくCを使用する2つの理由。
- 多くの組み込みプロセッサでは、C++ コンパイラがないか、そのために追加料金を支払わなければなりません。
- 私の経験では、組み込みソフトウェア エンジニアのかなりの割合が C++ の経験をほとんど、あるいはまったく持っていません (1)、あるいは電子工学の学位で教えない傾向があるため、彼らが知っていることに固執するほうがよいでしょう。
また、元の質問と多くのコメントでは、4Kb の RAM . 一般的な組み込みプロセッサでは、コードはフラッシュに保存され、そこから実行されるため、RAM の量はコードのサイズとは (ほとんど) 関係ありません。
確かに、コード ストレージ スペースの量は念頭に置くべきものですが、より容量の大きい新しいプロセッサーが市場に登場するにつれ、最もコストに敏感なプロジェクトを除いて、以前ほど問題にはならなくなってきています。
組み込みシステムで使用するための C++ のサブセットの使用について。 MISRA C++ 規格があり、これは一見の価値があるかもしれません。
EDITです。 参照 この質問 で、組み込みシステムのためのCとC++の比較について議論されました。
関連
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】'cout'は型名ではない
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] なぜ (int)x ではなく static_cast<int>(x) を使うのですか?
-
[解決済み] 配置換え」にはどんな使い方があるのか?
-
[解決済み] 関数のパラメータに 'const' を使用する
-
[解決済み] 些細なキーの場合、unordered_mapよりもmapを使用する利点はありますか?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
-
[解決済み】f(i = -1, i = -1)の挙動が未定義なのはなぜ?
-
[解決済み】配列でunique_ptrを使用することはありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] ASP.NET MVCアプリケーションをローカライズする方法は?