- ベストアンサー
C言語の特徴と開発方法について
- C言語の特徴や開発方法について理解したい。
- C言語は他の言語と比べてライブラリやフレームワークが少ないが、それでも多くのプログラムが作られている理由を知りたい。
- OSの開発においてC言語の役割とコンパイルの仕組みについて説明してほしい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと極論になりますが... ○ライブラリ fopen,printf,scanf等は使ったことありませんか? 厳密に言えば、これらは「C言語」ではなく「標準ライブラリ」というライブラリにある関数です。 でも、「C言語で標準ライブラリを使って作りました」なんて言う人はほとんどいないでしょう。 標準でないものでも、総合的なライブラリもあります。 しかし、どちらかと言えば、目的に特化したものの方が多いです。Cの思想や利用目的を考えたらその方が正しいのかもしれません。 ○コンパイラ 別に、使用しているOS用しか作れないわけではありません。ようするに最終的に目的のオブジェクトができればよいのです。 画像に例えれば、どんなソフトを使おうとも、JPEGとしての仕様を満せばJPEGとして表示できる、というような感じです。 現在の環境とは違う環境用にコンパイルするとをクロスコンパイルと呼びます。 実機が無くても、シミュレータやエミュレータで動作確認やデバッグを行えます。 Android用アプリも、PCのシミュレータでデバッグしますよね。あんな感じです。
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
1つ目: ruby とか python とか PHP とか自体が C でできてるんじゃなかったっけ. 2つ目: 最悪, 人間がコンパイルすればいい. 「できるかどうか」ではなく「やりたいかどうか」という問題はあるが.
- zwi
- ベストアンサー率56% (730/1282)
>1つ目 >検索してもrailsとかjqueryのようなフレームワーク(ライブラリ?)は見つかりません。 >これが無かったらプログラムなんて作れないのでは? C言語の場合は、WEB専用とか機能特化していないので開発者の用途に応じてライブラリは色々なものが別々に作られています。色々ありすぎて、今更体系にまとめられないと言う事情もあります。 有名なのだと、クロスプラットフォームのGUIフレームワークとしてGTK+がありますね。 「GTK+ - Wikipedia」 http://ja.wikipedia.org/wiki/GTK%2B ゲームとかだとDXライブラリ(Windows限定)とかSDL(クロスプラットフォーム)など色々有ります。 「SDL - Wikipedia」 http://ja.wikipedia.org/wiki/SDL 「DXライブラリ置き場 HOME」 http://homepage2.nifty.com/natupaji/DxLib/ まぁ、DirectXやらWin32APIやらOpenGLやら描画系のAPIを直接使っている場合もありますので、配布ライブラリに頼らず自前ライブラリで組んでいる場合もありますね。 C++だとさらに多くてとてもたくさん有るとしか言えません。 「link集/ライブラリ系/C++ - NomisoBraaan Wiki」 http://www.nbrains.net/php/pukiwiki/index.php?cmd=read&page=link%BD%B8%2F%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA%B7%CF%2FC%2B%2B C言語だけでもたくさん有るのが分かると思います。 >2つ目 >コンパイラはOSの上に立っているとするなら、OSがない状態でコンパイラはどこに立てばいいのか。 その理論で言うと新しいOSを作るコンパイラが無いことになります。 今あるOS上で動くコンパイラで新しいOSを作るのが正しいです。 じゃあ、OSが生まれる前は? それはOSなしで動くアセンブラなどが使われました。
- mtaka2
- ベストアンサー率73% (867/1179)
・ライブラリについて C言語においても、さまざまなライブラリが存在します。 C言語は、他の言語と違って、様々な用途に使えるため 「これ一つで何でもできる」ようなライブラリはありません。 jQueryのような「C言語はこれ一つで何でもできる」ようなライブラリは作れないのです。 「個々の用途に応じた小さなライブラリ」が非常に数多く存在しますので、 結果として個々のライブラリの注目度が下がっているだけでしょう。 あまりに数が多すぎて例を挙げるのも難しいのですが、 たとえば、JPEG画像を表示しているプログラムでは、よく Independent JPEG group の JPEG ライブラリが使われています。C言語以外の言語でも、C言語のJPEGライブラリを組み込むことが多いです。 非常によく使われるライブラリで、これの恩恵を受けている人は多いと思いますが、一方でJPEG画像表示が必要ないC言語開発者にとっては縁のないどうでもよいライブラリと言えます。 ・開発環境について あるOSを開発するときに、そのコンパイラを動かすOSがそれ自身である必然性はどこにもありません。 別のOS上でコンパイルすればいいのです。 そういう開発の仕方を「クロスコンパイル」「クロス開発」といいます。 これに対し、開発環境と実行環境が同じものは「セルフコンパイル」と呼びます。 たとえば、再初期の Linux は minix というPC用 UNIX 系OSの上で開発されました。 minix上でコードを書き、コンパイルし、それを(minixを終了させてから別のOSとして)実行、 というクロス開発の流れをしていたのです。 この場合、Linux の開発のためだけにminix が必要になりますので、 ある程度開発が安定してから以降、今ではLinux上でセルフコンパイルできる環境を構築し、 Linux上でコードを書き、コンパイルし、それを(コンパイルに使ったLinuxを終了させてから別のOSとして今コンパイルしたLinuxを)実行、 という開発の流れになっています。 (このような経緯から、「Linux はminix を元に作られた」という誤解もあったりしますが、 あくまで開発環境として利用しただけであり、Linux が minix を元にしているわけではない、 ということに注意してください)
- jacta
- ベストアンサー率26% (845/3158)
1つめ > 検索してもrailsとかjqueryのようなフレームワーク(ライブラリ?)は見つかりません。 > これが無かったらプログラムなんて作れないのでは? では、そのRailsやjQueryはどうやってできたと思いますか? 魔法か何かでしょうか? それとも、天の恵みでしょうか? RailsやjQueryは違いますが、高級言語で利用可能な便利なライブラリは、CやC++で作られていることも少なくありません。 また、Cのライブラリというのはかなり充実しています。 何を作りたいのかにもよりますが、探し方にも問題があるかもしれません。 2つめ > コンパイラはOSの上に立っているとするなら、OSがない状態でコンパイラはどこに立てばいいのか。 クロスコンパイルについて調べてみてください。