• 締切済み

C言語について基本的な質問

ysk6406の回答

  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.1

こんにちは、制御系組込みソフトの開発を業としております。 > ソースを書いて実行する方法、(今はソフトを使っているのですが)その仕組みは、知っておくべきでしょうか? ちょっと意味がよく分からないので適当に解釈させていただきますが、 ・ソースから実行コードを作成する作業手順(コンパイラやリンカの使い方) →これは当然、熟知しておく必要があります。C コンパイラ(特に組込みソフト用)には様々なオプションがあり、その指定次第で全く異なったオブジェクトが生成されます。応用分野や作業フェーズ(デバッグ中なのか出荷版なのか等)によって、これらを適切に使い分けないと、仕事になりません。つまり、コンパイラは単に、人間に分かりやすい言語(C)を機械語に翻訳する手助けをしてくれるツールに過ぎないということです。 ・コンパイラの仕組み →コンパイラのアルゴリズムは別に理解する必要はありませんが、C のソースがどういうオブジェクト(つまり機械語)に変換されているかということは、やはり熟知していなければなりません。マイクロ秒単位で性能を争う組込みソフトの世界では、コンパイラの癖やバグ等を知り尽くした上で、最適なコードを書く必要があるし、デバッグの時(特に性能測定など)には、どうしてもアセンブラ語レベルでデバッグする局面も、避けては通れません。 あと、Java と C についてですが、これは単純にどちらか優れているという結論は出せません。応用分野次第ということになります。 Java の最大のメリットは、共通プラットフォーム(Java VM)の上で異機種間でのアプリのポータビリティが保証されるということと、ユーザ側でも簡単にアプリを開発できる仕組みが簡単に作れるということでしょう。このことは、既に携帯電話のiアプリで実証されていますよね。 その代償として、性能(実行スピード)は、同じ機能を C で書いた場合に比べて、恐ろしく遅くなります。 また、Java は言語として C より堅牢(安全)とも言われていますが、裏を返せば「融通が利かない」ということでもあります。特に制御系組込みソフトにおいては、ポインタが無いというのが致命的といっても良い欠点ですね。 したがって、専用のハードウェアの上で作りつけのソフトだけを組み込むということでしたら、Java より C の方が、一般的には適していると思います。たとえアプリを多数品揃えするにしても、C 言語ベースの共通プラットフォームを構築しておけば済むことですから。 何かまとまりのない回答になってしまいましたが、いずれにしても、開発されるシステムが何を目的とするかをしっかり把握した上で、開発言語を選ぶということが大切だと思います。

celica1
質問者

お礼

お返事ありがとうございます。 かなり専門的にされておられる方に回答していただいて、自分のあまりの知識のなさに申し訳なく感じてしまいました。  わからないなりに調べて理解したつもりなんですが、現在、使っているソフトは以下のような感じの解説です。 標準的なC言語ソースプログラムをコンパイル・実行するソフトウェアです。 独自に作成したプリプロセッサ・コンパイラ・リンカを備えており、(仮想機械用コードを出力し、実行する)C言語の学習向け処理系です。  これがysk6406さんの言われている組み込みソフトってことですよね? そして、このソフトは、独自のソースから実行コードを作成する作業手順、を持っていて、独自の結果が反映される。この作業は理解する必要があり、私が聞きたかったのも、この部分です。  そしてコンパイラの処理手順の理解はいらないけど、結果として出てきた言語は理解が必要である。  こんな感じで理解を深めたんですが、あってますでしょうか? 現在、考えているのが iアプリで提供できるサービスです。JAVAだと無料配布でほとんど作れてしまいそうなので、やっぱりJAVAかなと思うのですが、将来的なことも考えてC言語をやるべきではないか?とも思ってます。  まだまだ勉強しなければ。。。。  

関連するQ&A

  • C言語のコンパイラ設定について教えてください。

    猫でもわかるC言語のBorlandコンパイラをインストールしたのですが、参考書に載ってるとおりにソースを書いて実行したのですが、パスが設定されてないとかファイルが見つからないってでちゃうのです。つまりはコンパイルできないし、設定がちょっとわからないのです。 Borland社のコンパイラを使用したことがあり同じ経験を過去にお持ちの方いらっしゃいましたらアドバイスお願いします。また、JAVAの様な総合開発?できるみたいなフリーソフトがCでありましたらぜひぜひ教えてください。プロフェッショナルで、しかもこの様な質問も笑って答えていただけるようなすごい人、どうかよろしくお願いいたします。

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

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

  • CP/Mの言語仕様を教えてください。

    OSの基礎の基礎から学びたくて、CP/M8000やCP/M86など昔のOSのソースコードについて調べています。 ネットでの情報で、CP/M86などのソースファイルは、PL/Mという、これも又、昔のコンパイラで動く言語で書かれているということまではわかったのですが、このコンパイラは、今は現存していないらしいので、C言語でコンパイラを作成したいと考えています。 しかし、PL/Mの言語仕様がさっぱり分からないため、ソースコードを見ながら、”ヤマ勘”でコードをひもどいているのですが、できあがったコンパイラが何度つくってもうまく動きません。 どなたかこのPL/Mの仕様をご存じの方がおられれば、教えて頂けないでしょうか。よろしくお願いします。

  • C言語のエディタ

    コンパイラ・実行機能が付いていない、シンプルなC言語のエディタはあるでしょうか?

  • PICプログラム C言語とアセンブラ言語

    PIC18シリーズを使用して、プログラミングをしています。コンパイラはCCS-Cです。今まではすべてC言語で書いてきたのですが、アセンブラでしか設定ができない部分があり、今までのC言語のソースに加えてアセンブラを組み合わせようと思っているのですが、C言語とアセンブラを組み合わせることは可能なのでしょうか?

  • C言語が学べるフリーソフト

    C言語が学べるフリーソフトを探しています。 ボーランド社のが良さそうだったのですが、 登録が必要ということであきらめました。 他にいいものがあったら教えてください。 素人なのでわからないのですが、たいていコンパイラ と書いてあるのですが実行は出来ないんでしょうか?

  • VistaでC言語を勉強したい

    OSはVistaです。C言語は初心者で、行く行くはC言語でゲームを作れるようになりたいと 思ってます。まずは、基礎から勉強しようと思ってるんですが 、vistaで使えるコンパイラなど全くわかりませんでした。 無料で配布されているVisual studio 2008もインストールしてみたんですが、 C++しか使えない(?)ようでした。 vistaでCをやるには、どのソフト(ツール)を揃えれば良いでしょうか。 vistaに対応したやつを教えてください。

  • C言語でのコンパイラの作成方法

    C言語初心者のため、稚拙な文章になる可能性があることを最初にお詫びします。 現在Microsoft社のMicrosoft Visual C++ 6.0を用いてCドライブのルートにある「temp.c」というソースファイルをコンパイルするアプリケーションを作ろうと思っているのですが、ネット上で「C言語 コンパイラ 作成」等と検索しても、既にコンパイラがあることを前提としたホームページしか見つけることができず、肝心のコンパイラをどのように作ったらよいのかということが載ったホームページが見つかりません。 というわけで、今回はコンパイラをどのように作ったらよいのかというヒントだけでもいいので教えて頂けないかと思い投稿させて頂きました。 ちなみに「temp.c」はそこまで複雑なソースではなく、DOS上のアプリで、リソースやアイコンなどは用いないものです。 そもそも「コンパイラを作る」ということ自体が愚かな行為なのかと思ったりもします。 私が所持しているBcpadやMicrosoft Visual C++ 6.0に付属している既存のコンパイラを利用するということも考えたのですが、BcpadやMicrosoft Visual C++ 6.0の本体以外からコンパイラをどのように利用していいのかもわかりません。 どうぞ忌憚の無い意見をよろしくお願いします。 ちなみにOSはXPのSP3です。

  • C言語もしくはC++言語プログラマになれますか?

    私は30歳になったばかりです。諸事情によりずっと家にいます(母親の病気などです)。 5年ほど前JavaでWebシステムを作っていましたが、やめました。それ以降もJavaやPHP、VB.NETなどやってはいるんですが、なかなか腰を落ち着けられません。 私は本来の性格として基礎固めが大好きというか基礎がしっかりしていないと意味がないと考えてしまうタイプです。こと、プログラムに関しても、コンピュータの仕組みから理解してアセンブラやらの書物を読み、C言語を勉強したりするとコンピュータを根本から理解できて、やっと自分の役に立つという思考しかできないものです。いきなり高級言語のJavaやらC#やら.NETやらやっても、うわべだけさすってるようで、根本的な理解を得られないので(コンピュータに対する)、無駄だなあとどうしても感じてしまうのです。また、それよりも基礎からしっかり積み重ねた方が後々、新しい言語ができても理解の度合いというかどっしりと理解できるとおもうのです。 しかし、就職のことを考え、PHPやらC#やらJavaやらVB.NETやらを優先してきてどれもどっちつかずになってしまいました。当然Cなども合間をぬってやっていました。 で、私は、そのどっちつかずな状態がいやなので、CとC++に絞って勉強することにしました。で、低級コンパイラの中身やアセンブラも勉強していこうと決心しました。しかし、就職のことを考えると不安です。 あと、1年みっちり勉強するとして、CやC++の就職先はあるのでしょうか?自分としては、働ける限り年齢がいくつになってもがんばりたいとおもうのですが、なにしろ世間的にいうと全く遅い年齢です。もし、励ましになるような事もありましたら、ご回答していただければ、うれしいです。よろしくお願いします。

  • windowsでもC言語を始めたいのですが…

    某大学の数学科1回生です。 今までC言語を学んだことが無かったので、最近ASCIIの「C言語入門」 を購入しました。(4月から学校で講義が始まります。) この入門書を読み進めていくにはUNIX系のOSがあるとスムーズに進行出来るようです。 しかし、僕が使用しているパソコンはwindows7で、 非UNIX系のOSなのでC言語でプログラミングをする環境が整っていません。 そこで、次のサイトhttp://www.ooyashima.net/db/prog.htmでコンパイラと IDEとテキストエディタを手に入れる必要があります。 windowsのOSでも、UNIX系のOSを用いた時と同様にC言語プログラミングを 可能にするためには、先ほどのサイトで、コンパイラからテキストエディタまで 何を手に入れるのがベストでしょうか? 出来れば無料のソフトが良いです。 C言語やプログラミングに関しては全くの初心者なので、稚拙な文章となり 非常に読み辛かったかと思いますが、回答よろしくお願いいたします。