ページ 1 / 1
C言語ってなにができるんですか?
Posted: 2010年9月14日(火) 18:04
by ぷりん
なんか本とか読むとOS作ったりも出来るし何でも出来るみたいなこと書いてますが・・・
C言語の関数だけで到底作れるものではないと思うのですが?
C言語の関数だけで作るとしたらどういうものが作れるのですか?
Re:C言語ってなにができるんですか?
Posted: 2010年9月14日(火) 18:10
by たかぎ
> C言語の関数だけで作るとしたらどういうものが作れるのですか?
Cの文法の範疇で表現できない(物理的にアクセスできないものを含む)ハードウェアの制御を除く、すべてのものが作れます。
ただし、それはあくまでも技術的な話であって、予算や開発期間など、他の要因によってできないことはあり得ます。
Re:C言語ってなにができるんですか?
Posted: 2010年9月14日(火) 18:24
by softya
>C言語の関数だけで到底作れるものではないと思うのですが?
OSを作る場合、ブートロード等の一部はアセンブラの世話になるでしょうがOSをC言語で作ることは可能です。この場合C言語の標準関数のOSに依存する部分は全く使えません(malloc系、print系、file系、タイマ系など)ので、C言語で直接ハードウェアの制御レジスタを操作します。あるいは、BIOSコールを使ってBIOS経由でハードウェアを操作します。Cの文法の範囲で結構なことが出来ますよ。
「30日でできる! OS自作入門」とC言語でOSを作る本もあります。
http://book.mycom.co.jp/book/4-8399-198 ... 84-4.shtml
上記のOSをベースに自作されている方ですがソースコードを落とすことが出来ます。
http://www5a.biglobe.ne.jp/~torilon/tor ... ad_install
解凍するとC言語で書かれていることが分かると思いますよ。一部アセンブラあり。
ちなみにLinuxのコードの大半もC言語です。
Re:C言語ってなにができるんですか?
Posted: 2010年9月14日(火) 19:33
by Dixq (管理人)
多分今はprintfやscanfのような標準関数しかまだご覧になったことが無いのではないでしょうか。
恐らく今C言語を書き始める時に
#include <stdio.h>
と書いていると思います。
これはstdio.hというライブラリをインクルードして、出来る事を増やしています。
C言語って実は何もライブラリを使わない状態だとすごくちょっとの事しか出来ません。
コンソール画面に文字を表示することも出来ません。
しかしprintfという関数を使うためにstdio.hというライブラリをインクルードすることで、出来る事が増え、画面に文字を表示することが出来るようになります。
そんな風にライブラリをドンドンインクルードしていくことで出来る事がドンドン増えていきます。
例えば、コンソールプログラムをどんなに勉強してもWordみたいなソフトは作れる気がしないと思うかもしれません、
しかしwindows.hをインクルードして、WINAPIを使うようになれば、次第に作れそうな気がしてくるかもしれません。
C言語を使えば何でも作れますが、難しい事をするなら専門的な知識が必要です。
逆に専門的な知識があれば、一般的なソフトウェアならなんだって作れます。
ぷりんさんの今のC言語のスキルを補足してもらえたらより的確なアドバイスがもらえるかもしれません。
何か目標を持ってこれを作りたいというものがあれば、それについて質問されてはいかがでしょうか。
Re:C言語ってなにができるんですか?
Posted: 2010年9月14日(火) 19:49
by たかぎ
ちなみに、純粋な標準Cの機能だけを使ったのでは、できないことはたくさんあります。
メモリ上の任意のアドレスにアクセスすることさえ、できるとは限りません。
逆に、処理系の独自拡張を使えば、CだけでOSができてしまう可能性もあります。
OSを作る上で最初の関門となるのは、スタックポインタをどうやって設定するかであり、割り込みの禁止と許可をどうやって制御するかです。
これらを何とかする独自拡張機能(場合によってはインラインアセンブラ)が備わっていれば、かなりのところまで進みます。