アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語の入門書をようやっと終えたばかりの素人です。
C言語の標準的な機能ではGUIなどは扱えず、本格的なゲームなどを作成するためには別途にWinAPIやDirectXなどの習得が不可欠だということを知りました。
しかしここで疑問なのですが、もしC言語では絶対にGUIが扱えないのであれば、これらWinAPIやDrirectXというGUIを扱う機能を持つ部分は、別の言語(?)で書かれていることになりますよね。これは何の言語で書かれているのでしょうか? 
それともここで言う「C言語単体でGUIは無理」というのは「扱えないことはないが、初心者が扱うには難しすぎる。今の時代まずやらないほど面倒くさい。こういうのを用意してくれてるから使っておきなさい」という意味なのでしょうか?
もしそうなら、そういう「扱えないことはない」というところまで解説した書籍やサイトはありませんか?

ご回答よろしくお願いします。

A 回答 (3件)

最近の言語は全て


「言語自体には入出力機能は無く、入出力機能はライブラリが提供する」
ということになってます。つまり GUI は 言語の一部ではなく、ライブラリが
担当するものなのです。

C言語なら Windows API を使うしかないと思いますが、C++なら
MFC を使えばだいぶ楽をできるでしょう。C++/CLI なら .net Frameworkも
利用できます。

各ライブラリがなんで書いてあるかはライブラリによるでしょう。
多分 C や C++ もかなり活躍していると思います。一部はアセンブラ
で書かれていると思います。
    • good
    • 0

私達が「プログラムを作る」といった時、通常作成するのは、アプリケーションですが、アプリケーションは、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を作る」というキーワードで、書籍やサイトを当たってみれば、感触をつかむことが出来るかもしれません。
    • good
    • 3

アプリケーションが OS を経由していろいろ仕事をするのは, #2 のように「ハードウェアの違いを吸収する」以外にも「無法なことをさせない」という理由もあります. 例えば, バックグラウンドでなにか作業をしているプログラムが勝手に変なものを表示しても困るよね. そういうことをさせないよう全てのリソースを管理するというのも, OS の仕事の 1つです.



ちなみに「C言語単体」といってしまうと, 単純な文字の表示すら不可能です (printf などのライブラリ関数は「言語自体」とは一応分離されている). ということで Linux の printf をターゲットにしていろいろ解説している
http://www.shuwasystem.co.jp/products/7980html/4 …
なんて本もあったりします.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!