C言語の入門書をようやっと終えたばかりの素人です。
C言語の標準的な機能ではGUIなどは扱えず、本格的なゲームなどを作成するためには別途にWinAPIやDirectXなどの習得が不可欠だということを知りました。
しかしここで疑問なのですが、もしC言語では絶対にGUIが扱えないのであれば、これらWinAPIやDrirectXというGUIを扱う機能を持つ部分は、別の言語(?)で書かれていることになりますよね。これは何の言語で書かれているのでしょうか?
それともここで言う「C言語単体でGUIは無理」というのは「扱えないことはないが、初心者が扱うには難しすぎる。今の時代まずやらないほど面倒くさい。こういうのを用意してくれてるから使っておきなさい」という意味なのでしょうか?
もしそうなら、そういう「扱えないことはない」というところまで解説した書籍やサイトはありませんか?
ご回答よろしくお願いします。
No.1ベストアンサー
- 回答日時:
最近の言語は全て
「言語自体には入出力機能は無く、入出力機能はライブラリが提供する」
ということになってます。つまり GUI は 言語の一部ではなく、ライブラリが
担当するものなのです。
C言語なら Windows API を使うしかないと思いますが、C++なら
MFC を使えばだいぶ楽をできるでしょう。C++/CLI なら .net Frameworkも
利用できます。
各ライブラリがなんで書いてあるかはライブラリによるでしょう。
多分 C や C++ もかなり活躍していると思います。一部はアセンブラ
で書かれていると思います。
No.3
- 回答日時:
アプリケーションが OS を経由していろいろ仕事をするのは, #2 のように「ハードウェアの違いを吸収する」以外にも「無法なことをさせない」という理由もあります. 例えば, バックグラウンドでなにか作業をしているプログラムが勝手に変なものを表示しても困るよね. そういうことをさせないよう全てのリソースを管理するというのも, OS の仕事の 1つです.
ちなみに「C言語単体」といってしまうと, 単純な文字の表示すら不可能です (printf などのライブラリ関数は「言語自体」とは一応分離されている). ということで Linux の printf をターゲットにしていろいろ解説している
http://www.shuwasystem.co.jp/products/7980html/4 …
なんて本もあったりします.
No.2
- 回答日時:
私達が「プログラムを作る」といった時、通常作成するのは、アプリケーションですが、アプリケーションは、OSを介してグラフィックス(GUI等)を表示します。
流れとしては、以下のような感じです。
アプリケーション→OS→ドライバ→ハードウェア(グラフィックボード)→ディスプレイ
なぜOSを介してグラフィックスを表示するのかというと、ハードウェアの仕様は各社各様であり、その違いを吸収するためです。
例えば、単純に「○を描きたい」と思っても、これは、OSを介さない場合、
if(グラフィックボード==A社) {
グラフィックボードのビデオメモリのN番地にほにゃららという数値を書き込む
}else if(グラフィックボード==B社) {
グラフィックボードのビデオメモリのK番地に、hogehogeという数値を書き込む
}
のような処理が必要で、1つ数値を書き込んだところで、1ドットの点が打てる程度のものでしょう。
つまり、OSを介さない場合、○を描くためには、
・グラフィックボードの仕様を詳細に知らなければ、プログラムを書けず
・そのプログラムは、A社とB社だけで動作する、使い回しの効かないプログラムになり、
・○程度を描くのに、非常に沢山のソースコードを書く必要がある
という状況になります。
OSは、アプリケーションとハードウェアの間の賢い翻訳者のようなものです。「○を描け」と命令された場合、OSは、それを各ハードウェアの理解できる低級な多数の命令に翻訳して、ハードウェアに伝達する役割を担います。
ここで、ドライバというものが登場します。OSとてソフトウェアです。ハードウェアの仕様の全てを知っているわけではありません。そこで、ハードウェアを開発する会社に「ドライバ」という、ハードウェアを制御するためのソフトウェアも一緒に開発してもらいます。そのドライバをOSにインストールすることで、OSはハードウェア毎に適切に命令を翻訳する能力を獲得するのです。
OSはアプリケーションからの命令を受け取る入口として、API(Application Programming Interface)を用意しています。例えばWINDOWSであれば、WinAPIになりますね。(※DirectXも、最終的には、WinAPIを実行するのではないでしょうか。よく知りませんが。)
アプリケーションの開発言語はたくさんありますが、それらもAPIを通じてハードウェアに命令を実行させているのです。
>もしそうなら、そういう「扱えないことはない」というところまで解説した書籍やサイトはありませんか?
ということであれば、「OSを作る」というキーワードで、書籍やサイトを当たってみれば、感触をつかむことが出来るかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- C言語・C++・C# C言語について コマンドラインで >変数 12.00 (char型) と、小数点付きの値を共用体に渡 1 2022/04/22 16:56
- 英語 セキュリティーの英語的ニュアンス 3 2022/04/08 23:43
- 哲学 日本語のあたらしい文法を考えよう。 6 2022/06/25 17:41
- C言語・C++・C# 双方向リスト 1 2023/06/28 04:16
- その他(暮らし・生活・行事) 方言でしゃべる人! 12 2022/07/21 18:56
- 日本語 意味とは何か? どこにあるのか?(Ⅱ) 4 2022/04/21 13:35
- 日本語 〈場所を示す「に」と「で」〉 という誤り 36 2022/11/12 15:04
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#とC++とJavaが学べる書籍につ...
-
Pythonって何を意識した言語な...
-
プログラムに書かれる"%"記号の...
-
C言語、C+、C++、C#の違い
-
質問失礼します。 プログラム言...
-
最新のプログラム言語を学ぶに...
-
UWSCはどのプログラミング言語?
-
rpa化する言語としてら何があり...
-
C言語とhtmlの違いを どな...
-
VBScriptで引数を省略したい場合
-
COBOLでのNOT = の AND条件
-
COBOLで文字タイプを数字...
-
楽しくて最高のプログラミング...
-
HTMLてインタプリタの類になる?
-
UNITY Float型の接尾辞fって
-
vbaとc言語の関連性について
-
TO_CHARで小数点以下がある場合...
-
メダルゲームのプログラム
-
FORTRANと他の言語(c、c++、ba...
-
VCとVC++
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語、C+、C++、C#の違い
-
楽しくて最高のプログラミング...
-
Pythonって何を意識した言語な...
-
C言語とhtmlの違いを どな...
-
プログラムに書かれる"%"記号の...
-
COBOLでのNOT = の AND条件
-
C++ ってなんて読む?
-
質問失礼します。 プログラム言...
-
プログラミング言語の制作方法...
-
UNITY Float型の接尾辞fって
-
C言語って古いですか?
-
Int('1234') で、strをかんたん...
-
COBOLで文字タイプを数字...
-
TO_CHARで小数点以下がある場合...
-
最新のプログラム言語を学ぶに...
-
C++における継続行
-
vbaとc言語の関連性について
-
VBScriptで引数を省略したい場合
-
VBSでDim、Private、Publicの違い
-
HTMLとC++で、どんなホームペー...
おすすめ情報