アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

コンパイラはlinuxのgccを使えと指示されたのですが、そもそもコンパイラが違うとどう変わってくるのでしょうか?windows7で使えるコンパイラで勉強してはいけないのでしょうか?

コンパイラの違いが大したものでなければ家ではwindows7で使えるフリーのコンパイラを使いたいのですが。もし、違うコンパイラで良いのならお勧めのものをどなたか教えてください。

また、C言語で調べてみたところC++のことばかり出てきました。
C言語とC++はあまり違いが無い、と聞いた覚えがあるのですが、C言語のことがあまり載ってないから替わりにC++を勉強する、というのではいけないのでしょうか?

いくつも質問すみません。どなたかお願いします。

A 回答 (9件)

根本的な部分で理解できていない回答者もいるようなので事実関係をはっきりさせておきます。



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が指定されているのでない限り、コマンドラインで学習するようにしましょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/19 17:45

基本的には、#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% …
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/20 16:35

> ただ1番の方の「Cを勉強したい人には、CとC++の本や資料はすべて有効です。

」というのが少し引っかかってはいますが・・

その主張は事実誤認に基づくものです。
有効なものもあればそうではないものもありますが、そもそもCとC++の両方を熟知していなければ、その見極めは不可能です。
    • good
    • 0

どのような課程かは不明ですが、授業で教えるような範囲でCの規格を超える部分(=コンパイラの方言など)を扱うことは通常ない、とは思っていいでしょう。


その範囲に於いてはWindowsでもLinuxでも、Cの規格に準拠するコンパイラを使う限りは同じソースコードを書けば同じように動作します。
#Cの規格も何度かバージョンアップされているので、どの版準拠かで違いが出ることがあるにはある

WindowsにもGCCは存在するのでそちらで勉強されるのがいいでしょう。
IDEが欲しければEclipse/CDTがあります。
まぁVMWare PlayerやVirtualPCにLinux入れてしまってもいいんですが、環境合わせが目的ならそもそもディストリビューションから合わせないと話にならないはずなんですけどねぇ。

なお「Cを勉強する」ために「C++を勉強」してはいけません。
最も大きな理由は、大抵のC++入門はCでは使えないC++専用の部分を多く扱うため、Cへの知識の転用が効かないことです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/19 17:28

>コンパイラはlinuxのgccを使えと指示されたのですが



この意味は「コンパイラと、自分が作った(コンパイルした)プログラムの動作環境はlinuxにすること」「コンパイラはgccにすること」と言う意味です。

そして、講義は「動作環境がlinuxで、コンパイラにgccを使っている」として進みます。

で、私が講師または教授の立場だったら「指示に従わず、Windowsなど他の動作環境を選んだり、フリーのコンパイラを選ぶ学生」には「指示に従わないのなら、講義を受ける意思がない」として「単位は与えません」よ。

つまり「単位やらんから、また来年来い」って事。

なので「貴方には、他の動作環境や、他のコンパイラを選ぶ選択権などない」のです。

「大学の講師、教授の権限」をナメてもらっちゃ困ります。貴方を落第させる事なんて超簡単なんですよ。

「単位やらん」の一言で済んでしまうのです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/19 17:24

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/
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/19 17:21

C言語にも「方言」があって、全て同じではありません。


一応、ANSIとかC99とかいうような規格はあるのですが、その準拠状況はまちまちです。
また、Visual CにはWindowsで使うための、GCCはGCC独自の拡張がされています。

LinuxでのGCCと指定があるのですから、可能な限りそれにあわせる方がよいでしょう。

>また、C言語で調べてみたところC++のことばかり出てきました。
>C言語とC++はあまり違いが無い、と聞いた覚えがあるのですが、C言語のことがあまり載ってないから替わりにC++を勉強する、というのではいけないのでしょうか?

2つの言語の違いを理解した上で、アルゴリズムとかプログラミングのやり方とかを勉強する、ということならよいですが、そうでなければお勧めできません。
下手をすれば、(入門書に最初に出てくるプログラムとして有名な)「Hello world!」でいきなりつまずきかねません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/19 17:12

コンパイラ自体は、#1さんのいうとおりコンパイラをコンパイルすればどのプラットフォームでも動きます。



でも、学校側がOSとしてLinuxを指定しているのですから、Linuxの開発環境を整えた方が良い。

言語としては同じでも、開発環境が変われば環境変数や、OS依存のライブラリ等が変わってきてしまうからです。
家で一生懸命作った物が、学校へ持っていってコンパイルしたらエラーだらけじゃ悲しいでしょ?

お勧めはCygwinだけど、coLinuxもいいかもね。バーチャル環境でubuntuっていう方法も有り。
検索しようね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/19 17:11

いくつか間違いがあるので、そこからはじめます。


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

で、Cの何を勉強するのでしょうか?
こちらは、プロのプログラマなので、わかる範囲というか、おそらく
質問のすべてに答えられると思いますよ。
(おそらく難しい質問そのものがないと思われるので)
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/19 17:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!