質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.35%

  • C#

    4785questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • C

    2538questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    2431questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Objective-C

    1070questions

    Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

C / C++/ C# はどう違うのか

受付中

回答 4

投稿 2017/11/30 14:11 ・編集 2017/11/30 14:12

  • 評価
  • クリップ 0
  • VIEW 237

moscow3

score 48

C言語超初心者です(というかまだほとんど勉強すらしていません)が、 
C言語にはC / C++ / C# /objective C (?) があると聞きました。 
それで、これらはどれくらい違いがあるのでしょうか?
(例えば、Cで書いたプログラムをC++の実行環境で動かす みたいなこと(あるいは逆)はできますか? )

「これとこれは明らかにここが違う」みたいなことを簡単に教えていただけると幸いです

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+9

まずはC言語があって、残り3言語はそこから派生していきました。その派生の仕方が違います。

  • C++…C言語にあった「構造体」を拡張して「クラス」にするなどを行っていった派生形。C言語のコードはほぼそのまま動きます。
  • Objective-C…C言語とは別系統のSmalltalk的なオブジェクト指向システムを乗っけた派生形。C言語部分はそのままです。なお、現状ではほぼAppleプラットフォーム専用の言語ですし、後継となるSwiftも出ているので、今から取り掛かるメリットはなさそうです。
  • C#…C言語的な文法で、完全にオブジェクト指向な言語として作られたもの(C言語のコードは動かない)。マイクロソフトが策定したこともあってWindows向けが主流だけど、Xamarinでのモバイル開発など他のプラットフォームにも進出しようとしています。

基本的には、使うプラットフォームに合った言語を選択する、というのが第一です(特に、Objective-CやC#は、使える環境が限られています)。

投稿 2017/11/30 14:25

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+5


言語について
まず、大本として C があります。
C は何でもできる反面、いろいろとプログラマが注意せねばならないことが多いという問題があります(ポインタの扱い)。
これに対して、C++ は C に対してオブジェクト指向プログラミングが可能なように機能拡張し、かつ C から危険な部分を削る努力をしたたものになっています。
一方 Objective-C も C にオブジェクト指向プログラミング用の機能を追加したものではあるのですが、そのやり方が異なっています。(より純粋なオブジェクト指向に近い)

これに対して C# は、本質的には C(およびその派生)とは異なる言語です。どちらかといえば Java に近いものになっています。(設計思想的には同一設計者の手になる Delphi からの影響が最も大きいと思いますが)


実行環境について
どのような言語で書かれたプログラムも、最終的にはターゲットのCPUが扱えるものに変換する必要があります。(Java や .NET の場合はちょっと特殊ですが)
ですから、C で書かれたものであろうが C++ で書かれたものであろうが、実行環境は同じにできます。
C++ から C で書かれたライブラリを呼び出す、なんてのも日常茶飯事です。

投稿 2017/11/30 14:29

編集 2017/11/30 14:30

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+4

まず、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#は全く異なる系統の言語であり、下記のようになっています。

  1. C#の文法(シンタックス)はC++やJava等のC系から取り入れられている。C風文法(C-like syntax)等と言われるもので、他にはPerl、PHP、D、JavaScript等が採用している。
  2. C#の言語設計はDelphi(Object Pascal)から取り入れられている。(メイン開発者がDelphiの元開発者だった。)
  3. ネイティブ(機械語)ではなく、.NET上で動作するCLIへコンパイルすることを想定して作られている。

一見、Java(C++とObjective-Cをくっつけながら、オブジェクト指向だけを残したような言語)に似ており、実際にJavaから影響を受けた部分も多いのですが、根底にあるのはDelphiで有るため、上で挙げたCの系統とは根っこの部分で異なります。乱暴な言い方をすると、DelphiをJavaを参考にしながらC風文法にするとC#になるという感じです。似ているのは文法だけで他のC系とは互換性は一切ありません。

おまけ

  • C++/CLI .NET上で動作できるようにC++を拡張した言語。C++を内包している。

投稿 2017/12/01 00:07

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

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 21:26

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.35%

関連した質問

同じタグがついた質問を見る

  • C#

    4785questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • C

    2538questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    2431questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Objective-C

    1070questions

    Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。