C言語超初心者です(というかまだほとんど勉強すらしていません)が、
C言語にはC / C++ / C# /objective C (?) があると聞きました。
それで、これらはどれくらい違いがあるのでしょうか?
(例えば、Cで書いたプログラムをC++の実行環境で動かす みたいなこと(あるいは逆)はできますか? )
「これとこれは明らかにここが違う」みたいなことを簡単に教えていただけると幸いです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
まずはC言語があって、残り3言語はそこから派生していきました。その派生の仕方が違います。
- C++…C言語にあった「構造体」を拡張して「クラス」にするなどを行っていった派生形。C言語のコードはほぼそのまま動きます。
- Objective-C…C言語とは別系統のSmalltalk的なオブジェクト指向システムを乗っけた派生形。C言語部分はそのままです。なお、現状ではほぼAppleプラットフォーム専用の言語ですし、後継となるSwiftも出ているので、今から取り掛かるメリットはなさそうです。
- C#…C言語的な文法で、完全にオブジェクト指向な言語として作られたもの(C言語のコードは動かない)。マイクロソフトが策定したこともあってWindows向けが主流だけど、Xamarinでのモバイル開発など他のプラットフォームにも進出しようとしています。
基本的には、使うプラットフォームに合った言語を選択する、というのが第一です(特に、Objective-CやC#は、使える環境が限られています)。
投稿2017/11/30 05:25
総合スコア146018
0
言語について
まず、大本として C があります。
C は何でもできる反面、いろいろとプログラマが注意せねばならないことが多いという問題があります(ポインタの扱い)。
これに対して、C++ は C に対してオブジェクト指向プログラミングが可能なように機能拡張し、かつ C から危険な部分を削る努力をしたたものになっています。
一方 Objective-C も C にオブジェクト指向プログラミング用の機能を追加したものではあるのですが、そのやり方が異なっています。(より純粋なオブジェクト指向に近い)
これに対して C# は、本質的には C(およびその派生)とは異なる言語です。どちらかといえば Java に近いものになっています。(設計思想的には同一設計者の手になる Delphi からの影響が最も大きいと思いますが)
実行環境について
どのような言語で書かれたプログラムも、最終的にはターゲットのCPUが扱えるものに変換する必要があります。(Java や .NET の場合はちょっと特殊ですが)
ですから、C で書かれたものであろうが C++ で書かれたものであろうが、実行環境は同じにできます。
C++ から C で書かれたライブラリを呼び出す、なんてのも日常茶飯事です。
投稿2017/11/30 05:29
編集2017/11/30 05:30総合スコア13703
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
まず、C、C++、Objictev-C、Objictev-C++についてです。これらは、Cから始まってそれぞれ拡張したものという扱いです。
- C 汎用性と実用性を重視して作られた高級言語。低級なメモリ操作をアセンブリ無しで実装できる。名前はB(C以前に作られた高級言語)の次の意味。
- C++ Cにオブジェクト指向やテンプレートなどを追加し、拡張した言語。Cを内包しているが、
auto
等の一部互換性が無い部分もある。オブジェクト指向は構造体の拡張として作られており、もともと提唱されていたメッセージ主体のオブジェクト指向とは異なるが、オブジェクト指向そのものの再定義を担うことになった。 - Objective-C CにSmalltalk由来のオブジェクト指向(メッセージ主体の考え方の方)を追加し、拡張した言語。Cを内包している。
- Objective-C++ C++にSmalltalk由来のオブジェクト指向(メッセージ主体の考え方の方)を追加し、拡張した言語。C++を内包している。
上記についてはStackOverflowの回答にわかりやすい絵がありますので、参考にしてみてください。Objective-C++はObjective-CとC++を合わせた部分となります。
対して、C#は全く異なる系統の言語であり、下記のようになっています。
- C#の文法(シンタックス)はC++やJava等のC系から取り入れられている。C風文法(C-like syntax)等と言われるもので、他にはPerl、PHP、D、JavaScript等が採用している。
- C#の言語設計はDelphi(Object Pascal)から取り入れられている。(メイン開発者がDelphiの元開発者だった。)
- ネイティブ(機械語)ではなく、.NET上で動作するCLIへコンパイルすることを想定して作られている。
一見、Java(C++とObjective-Cをくっつけながら、オブジェクト指向だけを残したような言語)に似ており、実際にJavaから影響を受けた部分も多いのですが、根底にあるのはDelphiで有るため、上で挙げたCの系統とは根っこの部分で異なります。乱暴な言い方をすると、DelphiをJavaを参考にしながらC風文法にするとC#になるという感じです。似ているのは文法だけで他のC系とは互換性は一切ありません。
おまけ
- C++/CLI .NET上で動作できるようにC++を拡張した言語。C++を内包している。
投稿2017/11/30 15:07
総合スコア21739
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C言語にはC / C++ / C# /objective C (?) があると聞きました
これらはどれくらい違いがあるのでしょうか?
基本的に別言語と考えた方がいいです。
名前だけ似ていて、中身はほとんど別物です。
もちろん、共通する部分はあるものの、
別の新しい言語を覚えるのと、学習の労力はそう大差ないです。
というか、C#とC/C++よりも、C#とJavaの方が似ています。
「これとこれは明らかにここが違う」
C言語がこの中で、一番元祖です。
しかし、一番古くもあるので、
オブジェクト指向をサポートしていません。
逆に、C++、C#、Objective-CはOOPをサポートしています。
というか、Objective-Cの「Objective」は、オブジェクト指向の意味です。
Objective-CはほぼApple専用言語ですが、
そもそもジョブズがオブジェクト指向を重視したから、
Smalltalkに似ているObjective-Cを採用したのです。
Cで書いたプログラムをC++の実行環境で動かす
みたいなこと(あるいは逆)はできますか?
CコードをC++で動かす互換性はあります。が、逆は難しいです。
ゲーム機で言うと、PS1のソフトはPS2で動くけど、
逆はできないみたいなことです。つまり、後方互換です。
さて、C系言語のうち、どれを学習するか。
基本は使う目的によります。
たとえば、組み込みならC/C++、WindowsアプリならC#、
AppleのアプリならObjective-C(ただし今ならSwiftがある)、
といったしだいです。
投稿2017/11/30 12:26
総合スコア5592
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C言語は歴史がもっとも古く、様々な分野で使われてきました。組み込み開発やらライブラリ開発やら。メモリ解放について一番気を使う必要がある言語だと思います。
C++はC言語の拡張で、C言語で書いたソースコードも動かせます。オブジェクト志向が使われていて、コンシューマゲームなんかはC++が結構使われているみたいです。
C#はJavaやRubyのいいとこどりをした言語で、速度もCやC++ほどではないものの、それなりに速いのでPHPからC#に乗り換えるweb屋さんもいっぱい出ましたね。個人的にはC#で書くと、PHPよりもすっきり書ける印象です。また型推論などもあるし、LINQなどの機能もあり、一番機能的にはC#が充実していると思います。
投稿2017/12/24 18:49
総合スコア1161
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。