パスワードを忘れた? アカウント作成
95750 story

CとC++は似たようなモノか? 297

ストーリー by makeplex
違和感がないならまだ初心者ということか? 部門より

saitoh 曰く、

プログラミング言語のカテゴリ分けで、CとC++は一緒にされることが多い。Q&AサイトやSNS等でも「CとC++」というように同類視されている。 先日の当/.jpのアンケートでも、プログラミング言語に関する設問はこうなっている。
□C/C++
□C#
□Objective-C

CプログラマとしてはCとC++を一緒にされて迷惑している。実際, ネット上での質疑応答でも「まず CかC++どっちの質問?それを書いてくれないと答えられないよ」ってのが最初の応答だったりもするし。 個人的には、言語の「同類度」という観点では Cだけ別にしてオブジェクト指向という共通点がある C++/ObjectiveC/C#を一緒にするほうが妥当に感じるのである。

言語のグループ分けの際にどれとどれを同類にするのが妥当か、皆さんはどうお考えだろうか。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 本質的に C のスキルしか持っていないけれど、作業環境がたまたま C++ コンパイラである、
    という職業プログラマがまとまった数として存在するんじゃないだろうか。そういう人は、
    集計するときに C なのか C++ なのか不明確だから、区別しない方が面倒が少ない、とか。
    • もっというとVisual C++上のC言語しか扱えないC++プログラマもいますよね。
      そういう人は往々にしてswprintf(libc)とwsprintf(Windows API)の違いを理解していないです。

      親コメント
    • C++コンパイラの多くがCをコンパイルできるからじゃないでしょうか?

      むしろアセンブリ言語を一緒くたにされるほうが困ったりして。
      親コメント
    • > C のスキルしか持っていないけれど、作業環境がたまたま C++ コンパイラ

      その人が書いているプログラムはC/C++どちらなのでしょうか?
      通常想定される作業環境は「C/C++を切り替えて使えるコンパイラ」ですので、
      プログラマは必ず「どちらで書いているか」を意識していると思うのですが。

      過去に一度だけ、C++の現場で、Cしか書けないプログラマが何人かいて、
      その方々にはメソッドの中身を埋める仕事だけやってもらったことも
      ありますが、そういう人が「まとまった数」いるというのは考えたくない...
      # 普通ならC++からライブラリ切り出してCで書いてもらうとかやるとか、
      # テスターとかの支援作業側に回ってもらうとかするんだけどね...

      親コメント
  • CとC++は似たようなモノか?

    何と比べるかによるでしょう。 C# や Objective-C はよく知りませんが、 C, C++, Java のように並べるなら C と C++ が近いとは思いません。 C と C++ を一緒にするのは一方しか知らない人だけでしょう。一方、 C, C++, Java, Scheme と並べるなら C, C++, Java なんてどれも同じようなものだと思います。

    僕は極めて普通の一般人 [srad.jp]なので、 C も C++ も Java も Scheme も HTML も全部同じにしか見えませんけどね :P

  • by muraken (2830) on 2009年05月16日 23時21分 (#1566769)

    C89 ⊂ C++ だけど C99 ⊄ C++ だから、C 言語と言っても色々あることを考えないといけません。また、C# は C と似てないだけでなく、C# はオブジェクト指向言語だけど C++ はオブジェクト指向言語ではないので、C# が比較対象として出てくることが信じられないですね。C# が C++ と同類の言語だと思ってる人って多いんでしょうか?

    C++ は C++0x から言語の方向性をジェネリックプログラミングの方へ大きく拡張させるので、このトピックで挙がっているどの言語とも似ていない言語にどんどん近付いていくと思います。

    また、本文では挙がっていませんが、C++ を丸ごと含んでいるという意味で一番似ているのは Objective-C++ かな。

    --
    Kenta MURATA
    • by ei (19798) on 2009年05月17日 0時10分 (#1566793) 日記
      | C89 ⊂ C++ だけど…

      古いC++は存じませんが、C89 ⊄ C++98 です。(例えば関数外 const int i = 0; のスコープ。)
      親コメント
    • by Tsann (15931) on 2009年05月17日 7時14分 (#1566913)

      C89 ⊂ C++ だけど C99 ⊄ C++ だから、C 言語と言っても色々あることを考えないといけません。

      そういう区別が付く人はいいんです。それらの違いがわからず「自分はCが書けるからC++もわかっている(拡張子.cppのファイルに有効に機能するコードが書ける)」と思い込んでる人がC/C++なる選択肢を選ぶから酷いことになるんですよ。

      C# は C と似てないだけでなく、C# はオブジェクト指向言語だけど C++ はオブジェクト指向言語ではない

      既にコメントが付いていますが、似てる似ていないは主観によるところが大きいですが、各種構文、言語として用意されている演算子と優先順位、関数の呼び出し方法などなど似てる点は多いと思いますよ。「異なる点があるから似ていない」というのは間違っています。異なる点があるからこそ「同一」ではなく「似てる」と言っているのですから。
      それからオブジェクト指向的でない書き方できるからと言って「C++ はオブジェクト指向言語ではない」と結論づけるのもどうなんでしょう。libjpeg [wikipedia.org]のソースを読むと認識が変わりますよ。これはC言語で書かれていますが、れっきとしたオブジェクト指向だと思っています。

      親コメント
      • by muraken (2830) on 2009年05月18日 8時34分 (#1567495)

        複数の言語を比較する場合、各言語が第一級で何を表現する能力を持っているかを考えたほうがいいです。
        たとえば、C言語は、手続きとしての関数、構造体、整数、浮動小数点数、ポインタなど。C++ は手続きとしての関数、構造体、数値、ポインタ、クラス、クラステンプレートと関数テンプレート、のような感じです。C# は無名関数を第一級で書けたりしますよね (C++ も C++0x から書けるようになるんでしたよね)。このような第一級で扱える概念の比較が、言語の比較だと私は思うのです。

        各言語は第一級で表現できない概念を複数持っていますが、第一級で表現可能なものを組み合わせることで、ほとんどの場合について説明的に実装する事が可能になります。その例の代表として、Tsann さんが挙げられている libjpeg であるとか GObject や libobjc のような C 言語で実装されたオブジェクト指向システムがありますよね。これらはオブジェクト指向を実装しているのであって、C言語がオブジェクト指向を第一級の概念として記述できているわけではありません。こういうものまで入れてしまうと、極論として各プロセッサの機械語だってオブジェクト指向を記述できていわけですから、同じになってしまうでしょう。これは言語の比較ではありませんよね。

        --
        Kenta MURATA
        親コメント
    • > C# はオブジェクト指向言語だけど C++ はオブジェクト指向言語ではない

      それはさすがに言いすぎでは... Smalltalk みたいな古い言語から見てもどっちもどっちだと思いますが。

      親コメント
    • また、本文では挙がっていませんが、C++ を丸ごと含んでいるという意味で一番似ているのは Objective-C++ かな。

      何を以って「似てる」と云うかに依りますが, あの角括弧だらけのソースを見て C++ と似ていると云うのは, 人によっては難しいのではないでしょうか?

      親コメント
  • by Anonymous Coward on 2009年05月17日 0時18分 (#1566801)
    議論するにはまず前提となる知識が必要なのでみんなで確認しましょう。ここ [thebbs.jp]で初めて知りましたがC, C#, C++は

    C -> C# -> C++

    と進化してきました。[49] より詳しくは

    C -> C2 -> C# -> CX -> C++ -> Visual C

    のように進化してきました。[52]

    今まで何年もプログラマーやってましたが知りませんでした。
  • 「C / C++」という式の演算順序と演算結果を正確に説明しなさい、という設問だったのかもしれません。
  • mindとひまわり(なでしこ)が違うって時点できずけよ・・・
    とおもったがそんな言語気にしてるやつはいないって時点で違う気が^^;
    --
    Minder
  • C#は文法こそCやC++に似ているとはいえ、.NET Framework上で動いていますから別物でしょう。 CとC++の違いはC++はオブジェクト指向、Cはオブジェクト指向ではない、ということだけなのでC++もオブジェクト指向な使い方をしなければ関数なども共通なのでCと同様で良いのではないでしょうか?C++をオブジェクト指向で使うのなら話は別ですが・・。 Objective-Cはよく知りませんが、名前からするとC++と同類でいいのでしょうか?
    • by hibirth (19787) on 2009年05月17日 0時09分 (#1566792)

      > C#は文法こそCやC++に似ているとはいえ、.NET Framework上で動いていますから別物でしょう。

      wikipediaのC#の記載http://ja.wikipedia.org/wiki/C_Sharp [wikipedia.org]の「言語仕様」にも
      書かれていますが...

      C#はCLIの仕様を反映した言語ですが、言語仕様として.netを前提としているわけではありません。
      また、CやC++も言語実装・ランタイム実装によっては「.net上で動いている」ものもあるでしょう。

      「言語仕様」と「言語実装・動作環境」を混同してませんか?

      親コメント
    • > Objective-Cはよく知りませんが、名前からするとC++と同類でいいのでしょうか?

      同類にはならないでしょう。往時、C++と比較して、オブジェクト指向の手法が従来の C の記述と
      かけ離れているというのが、Objective-C に対する批判にあったくらいですし。(今でもあるのかも
      知れませんが)

      親コメント
typodupeerror

身近な人の偉大さは半減する -- あるアレゲ人

読み込み中...