あなたがC++コンパイラでコードをコンパイルした場合、そのコードは、それはまた、有効なCのコードであっても、定義C++のコードではないCです。
一部の有効なCコードは有効なC++コードではなく、特にC99固有の機能にも当てはまります。両方で有効なコードのほうがわずかに異なるセマンティクス - たとえばconst
の意味です。しかし、ほとんどの場合、これは生成されたコードやそのパフォーマンスにほとんどまたはまったく違いを生じさせません。
あなたは一般的に何も現実的に同じコンパイラスイートを使用して、同じコードのCおよびC++のコンパイルの間に測定可能なパフォーマンスの違いを見ないだろう。 C++は実行時起動がわずかに異なり、main()より前にグローバルな静的オブジェクトのコンストラクタを呼び出す必要があります。しかし、あなたのC++コードも有効なCなら、コンストラクタは存在しないのでオーバーヘッドはありません。
C++ではより厳密な型合意が要求されており、より強力なエラーチェックが行われています。有効なコードは何か許容されません。一般に、Cコードがエラーや警告なしでC++としてコンパイルされる場合は、おそらくより良い/よりクリーンなコードになります。いくつかの例外があります。たとえばC言語では一般的にdiscouraged from explicitly casting the return from malloc()
ですが、C++では選択肢がなく、暗黙的な関数宣言は必要ないため、C言語ではそうしないという議論は成立しません。この場合、Cコードを有効なC++にするには、C言語で有効な間に悪い習慣を考慮する方法で記述しなければなりません。個人的には、プロトタイプの欠落に関するCコンパイラの警告を抑止したり無視したりすると、どんな場合でも値するものが得られるはずです。
最適化に関しては、同じコンパイラスイートを使用する場合、Cコンパイラの最適化は、おそらく正確なセマンティクスが異なる場合を除いて、C++コンパイラの最適化と同じである可能性があります。
それ以外では、有効なC言語であるC++コードを使用すると、C++の多くの利点が失われます。 C++固有の機能の多くは、ランタイムコストがほとんどまたはまったくない場合でも利用できます。一方で、一部の機能は比較的高価です - 特定のターゲットとアプリケーションを使用する前に実行可能な機能があることを確認してください。私はanother questionのそれを助けるかもしれないいくつかのリソースを記載しました。
基本的に、コンパイラは最初にコードを中間言語**に変換し、マシンコードの次に置きます。そのため、GCCなどではCとC++で同じ最適化が利用できます。 CコードにC++コンパイラを使用する理由 –
はいCコードのためにC++コンパイラを使用する必要はありません。しかし、ちょうどgccとg ++がまったく同じコードで、組み込みプログラミングのような環境で使用できる同じコードを生成することを知りたかっただけです。 – Dexters
Cで書かれたからといって、もっと効率的であると思う理由はありません.C++で何をするのかは手作業で行う必要があります。 –