• ベストアンサー

大学でC言語を勉強するように言われました。

大学でC言語を勉強するように言われました。 コンパイラはlinuxのgccを使えと指示されたのですが、そもそもコンパイラが違うとどう変わってくるのでしょうか?windows7で使えるコンパイラで勉強してはいけないのでしょうか? コンパイラの違いが大したものでなければ家ではwindows7で使えるフリーのコンパイラを使いたいのですが。もし、違うコンパイラで良いのならお勧めのものをどなたか教えてください。 また、C言語で調べてみたところC++のことばかり出てきました。 C言語とC++はあまり違いが無い、と聞いた覚えがあるのですが、C言語のことがあまり載ってないから替わりにC++を勉強する、というのではいけないのでしょうか? いくつも質問すみません。どなたかお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.7

根本的な部分で理解できていない回答者もいるようなので事実関係をはっきりさせておきます。 gccというのは、GNU Compiler Collection(GCC)に含まれるCコンパイラを起動するためのコマンドです。 ちなみに、C++を使うのであれば、gccではなくg++を使います。 よって、要求されているのは、C++ではなくCです。 C++とCは似て非なるものですので、混同すべきではありません。 次に、gcc(というかGCC)は多くのプラットフォームに対応しています。 Linuxだけでなく、WindowsやFreeBSDやMac OSXや組込み向けの環境などにも対応しているわけです。 しかし、元のソースは同じでも、それぞれのプラットフォーム用に構築したgccが同じものではありません。 ここではLinuxのgccと指定されているわけですから、Linux上で動作させるプログラムをLinux上でコンパイルできるgccだということです。 どんな課程かにもよりますが、Linuxを指定されているのであれば、POSIXの機能を使う可能性は十分に考えられます。 だとすると、Visual C++などは論外です。 Windows上で環境を構築するのであれば、VMware等の仮想環境上にLinuxをインストールするのが一番ですが、手軽さの観点からいえばCygwinでもおそらく大丈夫と思います。MinGWはダメですので避けてください。 あと、POSIX云々は別として、純粋なCだけだとしても、Visual C++で統合開発環境に甘えた学習をしてしまうと潰しがききません。 Linuxの場合でも、Eclipse等を使うと似たような状況に陥ります。 学校でEclipseが指定されているのでない限り、コマンドラインで学習するようにしましょう。

akinami_001
質問者

お礼

皆さんの回答を見ていると色々食い違っているところがあって初心者の自分はかなり混乱していますが、 linuxでGCCを使ってC言語を勉強しなければならない、ということはよく分かりました。 もう一度VMwareに挑戦してみようと思います。

その他の回答 (8)

回答No.9

基本的には、#3, #7,8の回答を基準にしてください。 残念ながら、一番はじめについた回答については、かなり問題があるかと思います。 C++を十分に理解すればCは読めるでしょうが、書くことはむしろ難しくなるんですよ。 C++だけ知った状態でCを書いた人は、必ずと言って良いほど罠にはまります。クラスなどの機能を避けたつもりでも、C++で当たり前に使っていた機能(※)を当然のように使ってしまうのです。こういったバグは、ソースコードを見てもC++としては正しいので自分一人では見つけることは困難です。 (※一部は現在標準となりつつあるC99にて認められていますが、ブロック途中での変数宣言、for文の初期化、関数のオーバーロード、一行コメント、返り値の型問題、structの省略など) Cで書いたプログラムは、ほぼ全てC++として通用します。一方、C++で書いたプログラムはそう簡単に単なるCには落とせません。敢えて言うなら、Cの基礎知識はC++でも通用するがC++の基礎知識はCでは通用しない、ということです。これもナンセンスな言い方ですけどね。 ところで、gccの方がVisual Studioのコンパイラよりも文法に対してルーズだったりします(gcc拡張のおかげもあり)。そのため、gccでコンパイルできたプログラムがVSでコンパイルできない、ということは良くあることです。 書いてはコンパイルしを繰り返していると、気づかないうちにgcc拡張を使っていた、というケースが良くあります。C99とgcc拡張の境界もコンパイルのオプションやgccのバージョンによってやや揺らぎますし、参考書籍でもC89を基準にしつつ微妙に新しい機能を使ってしまうようなものも多くあるため、このようなことが容易に起きます。 よほど言語を理解しているならともかく、実用本位で作っていると、むしろこのあたりの環境依存には引っかかりやすいものなのですよ。計算目的なら、環境はしっかり合わせた方が無難ではあります。 あとは、「フリー」という言葉に複雑な背景があることも付記しておきます。Visual Studioなどに対して軽々しく「フリー」と言ってはいけませんよ。「無料」とか「無償」なら問題ありません。 http://ja.wikipedia.org/wiki/%E3%83%95%E3%83%AA%E3%83%BC%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2

akinami_001
質問者

お礼

フリーだからと言って無料ではない、ですか・・ 初めて知りました。今後はそういったことにも注意していきます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.8

> ただ1番の方の「Cを勉強したい人には、CとC++の本や資料はすべて有効です。」というのが少し引っかかってはいますが・・ その主張は事実誤認に基づくものです。 有効なものもあればそうではないものもありますが、そもそもCとC++の両方を熟知していなければ、その見極めは不可能です。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.6

どのような課程かは不明ですが、授業で教えるような範囲でCの規格を超える部分(=コンパイラの方言など)を扱うことは通常ない、とは思っていいでしょう。 その範囲に於いてはWindowsでもLinuxでも、Cの規格に準拠するコンパイラを使う限りは同じソースコードを書けば同じように動作します。 #Cの規格も何度かバージョンアップされているので、どの版準拠かで違いが出ることがあるにはある WindowsにもGCCは存在するのでそちらで勉強されるのがいいでしょう。 IDEが欲しければEclipse/CDTがあります。 まぁVMWare PlayerやVirtualPCにLinux入れてしまってもいいんですが、環境合わせが目的ならそもそもディストリビューションから合わせないと話にならないはずなんですけどねぇ。 なお「Cを勉強する」ために「C++を勉強」してはいけません。 最も大きな理由は、大抵のC++入門はCでは使えないC++専用の部分を多く扱うため、Cへの知識の転用が効かないことです。

akinami_001
質問者

お礼

もう何人もの方に言われてしまいました。おとなしくC言語を勉強します。 ただ1番の方の「Cを勉強したい人には、CとC++の本や資料はすべて有効です。」というのが少し引っかかってはいますが・・

  • chie65535
  • ベストアンサー率43% (8514/19356)
回答No.5

>コンパイラはlinuxのgccを使えと指示されたのですが この意味は「コンパイラと、自分が作った(コンパイルした)プログラムの動作環境はlinuxにすること」「コンパイラはgccにすること」と言う意味です。 そして、講義は「動作環境がlinuxで、コンパイラにgccを使っている」として進みます。 で、私が講師または教授の立場だったら「指示に従わず、Windowsなど他の動作環境を選んだり、フリーのコンパイラを選ぶ学生」には「指示に従わないのなら、講義を受ける意思がない」として「単位は与えません」よ。 つまり「単位やらんから、また来年来い」って事。 なので「貴方には、他の動作環境や、他のコンパイラを選ぶ選択権などない」のです。 「大学の講師、教授の権限」をナメてもらっちゃ困ります。貴方を落第させる事なんて超簡単なんですよ。 「単位やらん」の一言で済んでしまうのです。

akinami_001
質問者

お礼

上の回答者さんのところでも言っていますが、講義ではありません。先輩に「ここを理解してこい」と言われただけです。詳しい勉強法は指示されませんでした。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

gccとくればC++でしょ。 C言語とC++は全くと言ってイイほど違います。 せいぜいコメントの書き方とか、基本制御文が 同じくらいで、あとは構成から技法まで、殆ど 違います。画面に文字を表示する方法から違い ますからね。 これから始めるのならC++の方がよいでしょう。 「gccでやれ」って言われていますし、Javaや C#を勉強する時にも役立ちます。 けっしてC言語の代わりにC++を勉強するような 態度ではいけません。 ところで、教員の方は何を考えているんでしょうね。 CとC++が異質のものという説明はしないんですかね? C++だけなら Visual Studio 2008 があります。 こちらはエディタやデバッガなども付属していますし、 無償でダウンロードできます。 但し、Microsoft固有の拡張命令セットも使えますが、 linuxへ移植する時に互換性が無いのでこれを避ける ようにします。 ちょっと、初心者には難しいかも知れませんけど、 使い方はググればいろいろ出てくるはずです。 C++の解説は「猫でも分かる」シリーズがお勧めです。 http://www.kumei.ne.jp/c_lang/

akinami_001
質問者

お礼

回答ありがとうございます。おとなしくGCCでC言語の勉強をしようと思います。 ちなみにこれは教師からの課題ではありませんし、これといったプログラミングについての説明は一切受けていません。ただ参考書を渡されて勉強してこい、とだけ言われました。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

C言語にも「方言」があって、全て同じではありません。 一応、ANSIとかC99とかいうような規格はあるのですが、その準拠状況はまちまちです。 また、Visual CにはWindowsで使うための、GCCはGCC独自の拡張がされています。 LinuxでのGCCと指定があるのですから、可能な限りそれにあわせる方がよいでしょう。 >また、C言語で調べてみたところC++のことばかり出てきました。 >C言語とC++はあまり違いが無い、と聞いた覚えがあるのですが、C言語のことがあまり載ってないから替わりにC++を勉強する、というのではいけないのでしょうか? 2つの言語の違いを理解した上で、アルゴリズムとかプログラミングのやり方とかを勉強する、ということならよいですが、そうでなければお勧めできません。 下手をすれば、(入門書に最初に出てくるプログラムとして有名な)「Hello world!」でいきなりつまずきかねません。

akinami_001
質問者

お礼

回答ありがとうございます。知識0の自分は指示通りC言語を勉強するべきですね・・・

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.2

コンパイラ自体は、#1さんのいうとおりコンパイラをコンパイルすればどのプラットフォームでも動きます。 でも、学校側がOSとしてLinuxを指定しているのですから、Linuxの開発環境を整えた方が良い。 言語としては同じでも、開発環境が変われば環境変数や、OS依存のライブラリ等が変わってきてしまうからです。 家で一生懸命作った物が、学校へ持っていってコンパイルしたらエラーだらけじゃ悲しいでしょ? お勧めはCygwinだけど、coLinuxもいいかもね。バーチャル環境でubuntuっていう方法も有り。 検索しようね。

akinami_001
質問者

お礼

回答ありがとうございます。初めはVMware→ubuntuとやろうとしたのですが、エラーが出てしまってどうやっても解決できなかったので他の方法を探している状態です。

  • hanmemomo
  • ベストアンサー率35% (205/580)
回答No.1

いくつか間違いがあるので、そこからはじめます。 LunuxのGCCというのは、まちがいでGCC自体には機種やOSはなく、 WindowsでもMacでも、さらに販売されていない謎のハードと謎のOSのような構成でも動きます。 GCCがオーピンソースコンパイラーのため、機種の壁を持っていないのです。 (ここで、コンパイラーをコンパイルする?って謎にぶつかったら筋はいいですよw) で、フリーのコンパイラーですが、 GCCもフリーですし、MicroSoftVisualStudio(エクスプレス)もフリーですよ 勉強なら、VisualStudio=VCがお勧めでしょう。 コンパイラー以外に統合環境(書き換えたファイルだけを反映したり個別でエラーを出したりする環境と、変数などの値を外部から参照してデバッグ支援を提供します)などがセットになった強力な環境です。 GCCはややプロ向けかもしれません。 C言語を拡張したものがC++となりますので、C++はわかるが、Cがわからないということは ありえません。 ですので、Cを勉強したい人には、CとC++の本や資料はすべて有効です。 逆にC++を勉強したい場合にはCの本や資料は無効になりますが。 で、Cの何を勉強するのでしょうか? こちらは、プロのプログラマなので、わかる範囲というか、おそらく 質問のすべてに答えられると思いますよ。 (おそらく難しい質問そのものがないと思われるので)

akinami_001
質問者

お礼

回答ありがとうございます。何を、と言われても自分は最終目的がまだ分からないような状態です。 ソース(というのでしょうか?)と、参考書を渡されて理解してこい、とだけ言われました。 ちなみに大学では電波天文学を勉強していて、その中で使うとのことです。

関連するQ&A

  • WindowsでC言語の勉強をするには?

    私は、情報学科の大学生です。家のパソコンでC言語を勉強するにはどうしたらいいですか?OSはWindows98です。エディタやコンパイラや実行を行うktermのようなものはどうすればいいのですか?それともやはり、Linuxをインストールするのが最適ですか?Linuxのインストールはなんだかむずかしそうだし、Windowsとの共存の実現はできるのですか?

  • C言語をフリーソフトで勉強したいのですが

    C言語をフリーソフトで勉強したいです。 なので 「窓の社」というサイトで「C言語を始めよう」というソフトをダウンロードしました。  その次にコンパイラをダウンロードしたいのですがwindows XPに適用したコンパイラが見つかりません。どこでダウンロードできますか?教えてください。あとコンパイラのほかに何か必要なものがあったら教えてくださいm(__)m

  • C言語で作ったらWindowsでもMacでもLinuxでも動くんですか?

    Linuxでgccを使ってC言語を勉強してます。 Linuxのgccでコンパイルして作ったプログラムはWindowsでもMacでも動くんでしょうか? 逆にWindowsで作ったのはとか、Macで作ったのは他のOSで動くんだろうかと疑問で・・・。 教えてください!!

  • C言語のフリーのコンパイラについて

    C言語の勉強を個人的にしたいのですが、おすすめのフリーのコンパイラがあれば教えていただきたいです。

  • C言語の学習について

    大学でC言語のプログラムを書いていますが、なかなか覚えが悪くて・・・ 学校のPCではWindowsのVisual C++で学習していますが、家で勉強するために買おうとしましたが、高くて買えなかったTT 何かフリーソフトでCが使えるいいものありませんかね?

  • gccコンパイラー

    今、gccでコンパイルするc言語のコンパイラーを探しています。 フリーでダウンロードできるいいコンパイラーはないでしょうか。 お勧めなどがありましたら教えてほしいです。 あと、C言語ではgccやbcc等のコンパイラーで プログラムソースの書き方容が変わったりするものなのでしょうか? 一応、ボーランド?のコンパイラーは持ってます。 ただ、今度OJTでUNIX環境のc言語開発の現場に行く事になり gccでコンパイルするもので勉強しとくようにいわれています。 宜しくお願いします。

  • C言語:おすすめの書籍とコンパイラを教えて下さい

    C言語初心者です。 ・C言語の基礎を学ぶよい書籍があったら教えてください。 今日本屋で見てきたのですが、種類がありすぎて返って迷ってしまいました。 ・コンパイラについてなのですが、過去の質問などみたところフリーのソフトがありそれでこと足りると書いてあったのですが、いくつかのフリーソフトがあるようで、どのソフトを使ってもあまり大きな違いはないのでしょうか? もしおすすめのフリーソフトがあれば教えて下さい。 アドバイスお願いします。

  • C言語についてどうしてもわからない疑問

    プログラミング初心者です。 C言語を勉強中に疑問に思ったことが2つあります。 まず1つ目。 C言語以外のプログラミング言語、例えばjavaとかC#とかjsとかpythonとかrubyとかPHPとか、には開発者にとって便利なライブラリとかフレームワーク(僕にはこの2つの明確な違いがわかりません。が、どちらも「開発者が定義しなくてもよい関数やオブジェクトの集合」という認識があります)がありますよね。 そのおかげで色んな人達がプログラミングし易くなりました。 ネット(はてぶのホットエントリとか)でも「馬鹿な俺がプログラミングを勉強して〇〇を作った」といった記事をよく目にします。 でも「C言語を使って」というのは聞いたことがありません。 そもそも、C言語はそいういったライブラリやフレームワークが少ないように感じます。 検索してもrailsとかjqueryのようなフレームワーク(ライブラリ?)は見つかりません。 これが無かったらプログラムなんて作れないのでは? しかし、世間にはC言語で作られたプログラムが多いのもまた事実。 C言語ではいったいどのように開発が行われているのか教えてください。 2つ目 unixとかlinuxといったOSはC言語で書かれている聞いたことがあります。 しかし、プログラムの開発は「コードを書く→コンパイル(→デバッグ)→実行」という流れですよね。 ではOSを開発するときに、そのコードをどうやってコンパイルするのでしょうか? コンパイラはOSの上に立っているとするなら、OSがない状態でコンパイラはどこに立てばいいのか。 そこがわかりません。 誰かこの2つの疑問に答えてください。 お願いします。

  • C言語によるMYSQL接続

    質問させて頂きます。 今、現在MYSQL5.1とcygwinを使用しています。 cygwinのgccから、MySQLに接続して、データベースの値を表示させたり、cygwinのgccから、データベースにデータを登録させたりすることがWindows上で可能ですか? gcc等のコンパイラではなく、VisualC++などを使用しないとWindows上ではできないとも噂でききましたがどうなんでしょうか? もし、コンパイラとC言語で上記のことができるのなら、参考になるHPや基礎から説明しているHPなど教えてください。 どんなことでもかまいませんので、基礎から教えてください。 私の実力では参考になるHPなど探し出すことができませんでした。 よろしくお願いします。

  • C言語の勉強にあたって

    今からC言語を勉強していく人から質問されたのですが、勉強にあたって、Cのアプリケーション(コンパイラ等)なしに実際のプログラムの動きを勉強する方法はないでしょうか? これでは漠然とした書き方ですが、例えば、インターネットのHP上でプログラミング→コンパイル→実行をシミュレーションできるようなHPはないでしょうか? こういうHPがあると、とりあえずインターネット環境とC言語の参考書があれば簡単に勉強できると思うんです。 そのようなHP、ありましたら教えてください。 何ヶ所かあるようでしたら、使い方が難しくない(初心者向け)ところが良いです。 よろしくお願いします。

専門家に質問してみよう