- C / C ++という用語の使用をやめるべきですか?
絶対に。このコンストラクトが何を表現するのかは明確ではありませんが、おそらく、この用語を使用する人に代わってCとC ++が何をしているのかについての混乱があります。
この混乱は欲求不満の一般的な原因であるため、多くの人々はそれについて非常に感情的になり、その用語の出現だけであなたの貢献に対して否定的になるのに十分な理由になります。これはばかげているように見えるかもしれませんが、私たちが持っているもののようです。
「C / C ++」について話す代わりに、あなたが実際に意味を明確にする用語を使用することをお勧めします。
C ++に当てはまるかもしれないし、当てはまらないかもしれないCの何かについて話しているなら、単にCと言ってください。
例: Cで関数をどのmain
ように宣言する必要がありますか?
最初は、C ++の答えは同じように思われるかもしれません:int main()
またはint main(int, char**)
。しかし、議論が進むにつれて、C ++では、関数はグローバルスコープで宣言されなければならないことを指摘するのが適切かもしれませんnamespace
。これはs がないため、Cでは意味がありません。一方、Cではmain
再帰的に呼び出すことができますが、C ++ではできません。C ++では、暗黙のがありreturn 0;
ますが「落ちる」場合main
が、C言語でreturn
文が任意のパスに必要です。リストが続き、議論する言語が何であるかを前もって明確にすれば、議論がずっと簡単になります。
C ++でCに当てはまる場合とそうでない場合がある場合は、単にC ++と言います。
例: ウィルmalloc()
のED配列int
sが、最初はC ++ですべてゼロのこと?
Cの短い答えはたまたま同じです:いいえ。しかし、答えが進むにつれてcalloc
、Cでは、A +を使用std::vector<int>
する方が良い選択であったかもしれないが、Cでは良い選択肢になることを指摘する価値があるかもしれません。
CとC ++の類似点を指摘したい場合は、CとC ++を言います。
例: CおよびC ++では、sizeof
an int
は実装が定義されており、コンパイラとアーキテクチャによって異なる場合があります。
ここで、CとC ++が同じように動作することを指摘したいと思います。両方の言語について明示的に話し合っています。
実際には、より具体的になり、「C」または「C ++」だけでなく、正確なバージョンについて話すことをお勧めします。両方の言語は進化しており、
C ++サポート/* … */
と// …
コメントCのみがサポートされていながら、/* … */
スタイルを。
正しいことも間違っていることもありません。
- #1の答えが「はい」の場合、CとC ++を組み合わせて使用するプログラムをどのように呼び出すのでしょうか?
言語は重複しているため、すべてのCプログラムには、C ++のように見える部分と、その逆の部分が含まれます。それでも、著者はおそらくCまたはC ++コンパイラの使用に落ち着くでしょう。だから、「プログラムが書き込まれていると言うC Cコンパイラでコンパイルされると、」プログラムが書き込まれている場合、「C ++、彼らはC ++コンパイラを使用する場合、彼らは現代の任意のC ++の機能を使用することを拒否する可能性がある場合でも、」。このようなC ++コードをCスタイルC ++と呼ぶ人もいます。オーバーロード、例外、ポリモーフィズム、テンプレート、およびI / Oストリームの欠如は、このようなコードの一般的な特性です。
代わりに、いくつかのファイルCで書かれており、Cコンパイラといくつかでコンパイルされている場合は、他のファイルはC ++で書かれ、C ++コンパイラでコンパイルして、オブジェクトファイルを一緒にリンクされている、私はプログラムが書き込まれている」と言うでしょうCとC ++のミックス」は、実際には既に行ったとおりです。
ただし、代わりに、作成者がすべてのファイルをC または C ++コンパイラでコンパイルできるように細心の注意を払って作成し、結果のプログラムが同じことを行う場合、「プログラムCおよびC ++の共通サブセットで記述されています」。
後者は、CコードとC ++コード間で共有されるヘッダーファイルの場合がよくあります。ところで、そのようなコードを書くのは簡単ではありません。あなたはさらにだけこのような構築物は、CおよびC ++で有効であることに使用されたことを強調したい場合と大きく異なるコンパイラベンダーによってサポートされている、用語ポータブル CおよびC ++の共通のサブセットは、このことを強調するために使用することができます。
- それらの両方が「異なる」言語であることを考えると、C ++コンパイラはC言語で書かれたコードのサポートをやめる可能性があります(現代のC ++はポインタ、動的メモリ処理などの基本的なもののためにCの考え方とは異なるため)?
この質問を理解したかどうかはわかりません。CとC ++ は異なる言語であるため、一方のコンパイラが他方の言語用に作成されたプログラムを受け入れることは期待できません。ただし、コンパイラは多くの場合、モジュール方式で設計されており、コンパイラにC ++ フロントエンドがある場合、Cフロントエンドもある可能性が高くなります。(コマンドラインスイッチまたは同様の方法で、どちらを使用するかを選択します。)両方の言語が広く使用されている限り、これが変更されることはほとんどありません。「モダンC ++」についてのあなたのポイントは、基本的には優れたコーディング標準と標準ライブラリの問題だと思います。コンパイラの視点、両方の言語の進化ではなく発散よりも収束しています。
- 現在、互換性を維持するためにC / C ++の標準を作成している人々の間にコラボレーションはありますか?
はい。C ++ 11およびC11で導入されたメモリモデルとアトミック操作ライブラリが良い例です。両言語の設計者は、互換性が重要であることを認識しており、互換性の改善に取り組んでいるようです。個人的には、コラボレーションがより強力になり、2つのISOワーキンググループが参加することさえあればいいのですが、私の願いは重要ではありません。
Bjarne Stroustrupは、皮肉なことに「C / C ++互換性」というタイトルの第4版C ++プログラミング言語の 44.3で、CとC ++のさまざまなバージョンの違いと共通性について語っています。この場合、何を意味するのかが明確であるため、この用語の使用は実際には適切かもしれません。
- #4が「はい」の場合、このようなコラボレーションは近い将来、現代のC ++の登場で終わる可能性があります(11/14/17)
上記で説明したように、それはC ++ 11で発生し、再び発生することが予想/期待/必要です。