![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
プログラミング初心者です。
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つの疑問に答えてください。
お願いします。
No.5ベストアンサー
- 回答日時:
ちょっと極論になりますが...
○ライブラリ
fopen,printf,scanf等は使ったことありませんか?
厳密に言えば、これらは「C言語」ではなく「標準ライブラリ」というライブラリにある関数です。
でも、「C言語で標準ライブラリを使って作りました」なんて言う人はほとんどいないでしょう。
標準でないものでも、総合的なライブラリもあります。
しかし、どちらかと言えば、目的に特化したものの方が多いです。Cの思想や利用目的を考えたらその方が正しいのかもしれません。
○コンパイラ
別に、使用しているOS用しか作れないわけではありません。ようするに最終的に目的のオブジェクトができればよいのです。
画像に例えれば、どんなソフトを使おうとも、JPEGとしての仕様を満せばJPEGとして表示できる、というような感じです。
現在の環境とは違う環境用にコンパイルするとをクロスコンパイルと呼びます。
実機が無くても、シミュレータやエミュレータで動作確認やデバッグを行えます。
Android用アプリも、PCのシミュレータでデバッグしますよね。あんな感じです。
No.4
- 回答日時:
1つ目: ruby とか python とか PHP とか自体が C でできてるんじゃなかったっけ.
2つ目: 最悪, 人間がコンパイルすればいい. 「できるかどうか」ではなく「やりたいかどうか」という問題はあるが.
No.3
- 回答日時:
>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?cm …
C言語だけでもたくさん有るのが分かると思います。
>2つ目
>コンパイラはOSの上に立っているとするなら、OSがない状態でコンパイラはどこに立てばいいのか。
その理論で言うと新しいOSを作るコンパイラが無いことになります。
今あるOS上で動くコンパイラで新しいOSを作るのが正しいです。
じゃあ、OSが生まれる前は?
それはOSなしで動くアセンブラなどが使われました。
No.2
- 回答日時:
・ライブラリについて
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 を元にしているわけではない、
ということに注意してください)
No.1
- 回答日時:
1つめ
> 検索してもrailsとかjqueryのようなフレームワーク(ライブラリ?)は見つかりません。
> これが無かったらプログラムなんて作れないのでは?
では、そのRailsやjQueryはどうやってできたと思いますか?
魔法か何かでしょうか? それとも、天の恵みでしょうか?
RailsやjQueryは違いますが、高級言語で利用可能な便利なライブラリは、CやC++で作られていることも少なくありません。
また、Cのライブラリというのはかなり充実しています。
何を作りたいのかにもよりますが、探し方にも問題があるかもしれません。
2つめ
> コンパイラはOSの上に立っているとするなら、OSがない状態でコンパイラはどこに立てばいいのか。
クロスコンパイルについて調べてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- C言語・C++・C# プログラミング言語「C#」の難易度ってどれくらいですか? 4 2022/05/12 19:15
- IT・エンジニアリング ITエンジニアの勉強時間や勉強方法について 初めまして閲覧いただきありがとうございます。 当方25歳 4 2022/06/09 18:51
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- IT・エンジニアリング バックエンドエンジニアに転職 2 2022/04/07 00:51
- C言語・C++・C# アプリ開発について 初心者です phythonをはじめに学んで、c#かswiftのどちらかを学ぶのは 2 2023/07/09 19:18
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
本格的なGUIを作るのにおすすめ...
-
縦スクロールのゲームの参考本
-
iCloudフォトライブラリ内の画...
-
じゃんけんゲーム(DXライブラ...
-
Google ColaboでGUI作成
-
標準ライブラリだけでgetch関数...
-
色空間YCCKのJPEG画像
-
C言語のライブラリ関数の勉強の...
-
unix-c と linux-c の違いは?
-
【iTunes】CDをiPhoneに取り込...
-
Windows Media Playerを開くと...
-
python urlopen error について...
-
LIBCMT.LIBをリンクしてコンパ...
-
C言語についてどうしてもわから...
-
WindowsAPIの調べ方
-
C++ 標準ライブラリの実際の中...
-
DLL読み込み時エラー
-
ATLとSTLの違いは何でしょうか?
-
静的ライブラリから静的ライブ...
-
ライブラリ作成時のグローバル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows Media Playerを開くと...
-
Google ColaboでGUI作成
-
python urlopen error について...
-
iCloudフォトライブラリ内の画...
-
本格的なGUIを作るのにおすすめ...
-
Ps+のフリープレイでDestiny2の...
-
declaration of 'index' shadow...
-
LIBCMT.LIBをリンクしてコンパ...
-
ISOイメージの作成方法について
-
32768以上の乱数を作りたいので...
-
boostのアンインストールについて
-
iPhoneのカメラロールへ画像を...
-
ライブラリ作成時のグローバル...
-
Dreamweaverのライブラリが反映...
-
静的ライブラリから静的ライブ...
-
C標準ライブラリがwinAPIを経由...
-
scipy っていうのをいれようと...
-
ATLとSTLの違いは何でしょうか?
-
音声出力のライブラリ
-
c言語でntpdateコマンドにあた...
おすすめ情報