C言語の次に学ぶべきこと編集

この節では、C言語及び標準ライブラリを学んだ後、次に学ぶべきことをまとめる。

といっても、「これら全てを学ばないとプログラムが作れない」というわけではなく、自分でプログラムを作りながら、必要なものを学んでいけばいいだろう。

標準ライブラリ以外のライブラリの使い方編集

C言語には標準ライブラリ以外にも、 様々なライブラリが存在する。 自分が使いたい機能を持ったライブラリの使い方を学習して、 何かプログラムを作ってみるといいかもしれない。

例えばゲームプログラミングをWindows上でしたいなら、後述するDirectXを使いやすくまとめた「DXライブラリ」というライブラリがある。

データ構造とアルゴリズム編集

データ構造とは、実際のデータをコンピュータのメモリ上でどのように表現するか定める形式である。 アルゴリズムとは、そのデータを用いて計算し問題を解くための手順や考え方である。 データ構造とアルゴリズムを学ぶことで、 より複雑な問題をプログラムで解けるようになる。

他の言語編集

ある一定以上複雑なプログラムを作ろうとすると、 C言語では難しくなる場合がある。 C言語以降に開発されたオブジェクト指向をサポートする言語を学ぶのも手だ。 例えば、C言語にクラスの機能を導入したC++という言語がある。 言語によって何ができるかにはあまり違いはないが、何を作りやすいかはかなり異なる。

インラインアセンブラ編集

インラインアセンブラとは、C言語のソースコードの一部に、アセンブリ言語を含めることである。

なお、本書ではアーキテクチャは X86系を前提とする(2010年代の一般的なパソコンのアーキテクチャが X86 系である)。

もし、ハードウェアの制御などでC言語がサポートしていない動作をさせたい場合、アセンブラでプログラムする必要があり、このような時にインラインアセンブラを使うことで、C言語とアセンブラを併用できる。

他の目的としては、インラインアセンブラを用いることで、 実行速度を高めたり、メモリ使用量を減らしたりできる。

マイクロソフト Visual C++ の場合編集

Windowsの場合、Visual C++のソースコードにアセンブリ言語を含めるには、次のように記述する。

__asm アセンブリ文

または

__asm {アセンブリ複文}

asmの前にアンダーバー(_)が2つである。

かつて MASM (Microsoft Macro Assembler) というマイクロソフト製のアセンブラがあったが、MASMをインストールする必要は無い。

gcc の場合編集

Linuxなどにおける gcc の場合、

__asm__ {"アセンブリ文;"};

または


__asm__ {"アセンブリ文\n\t"};

となる。

__asm__ は asm と書いてもいい。

だが、別のコンパイラのインラインアセンブラとの混同を防ぐため、なるべく __asm__ で書いたほうが安全かもしれない。

また、アセンブリ文をダブルクォーテーションで くくる必要がある。

命令が複数行ある場合は、

__asm__ {"アセンブリ文\n\t"
         "アセンブリ文\n\t"
};

のように1行ずつ、ダブルクォーテーションで くくる。


命令の後に「\n\t」または「;」を加える必要がある。

Windows依存の技術編集

下記の技術はwinodwosだけに依存して、mac OSやLinuxでは使えない技術である。

だが、2010年代の今のところ、windowsでこれらの分野の学ぶのが最も入門しやすいので、紹介しておく。

Visual Studio のC++(いわゆる Visual C++)を使うことで、下記の技術を利用することができる。

Win32API編集

C言語と標準ライブラリを学ぶことで、ウィンドウに文字列を出力したり、変数にキーボードから入力したりできる。 このような文字のみを用いたユーザインターフェイスを、キャラクタユーザインターフェイス(Character-based User Interface, 略はCUI)と呼ぶ。

一方、今日のプログラムは、画面にウィンドウを表示し、

ウィンドウ内にボタン、チェックボックス、コンボボックス、ラベル、リストボックス、
ピクチャボックス、ラジオボタン、テキストボックスなど様々なコントロールを配置し、

キーボードやマウスを使って操作できる。

このようなグラフィカルなユーザインターフェイスを、グラフィカルユーザーインターフェイス(Graphical User Interface, 略はGUI)と呼ぶ。

Windows上でGUIをもったプログラムを作成するには、「Win32API」というものを学ぶ必要がある。

Win32APIを用いることで、画面にウィンドウを表示し、BitBlt関数を用いて矩形範囲のグラフィックをコピーしたり、 sndPlaySound関数を用いてWAVE音声を再生したりできる。

Visual C++ でなくとも、Visual Basic などでも Win32APIの提供するAPIの多くは利用できる。だが、wikibooksのC言語の入門的な単元を読破した読者なら、Visual C++ でWin32APIに入門するのが比較的にラクだろう。

DirectX又はOpenGL編集

DirectX編集

高速な2Dグラフィック処理や、3Dグラフィック処理を行うには、Windows上で行う場合なら、 DirectXというものを学ぶ必要があるだろう。

DirectXを用いることで、ハードウェアを用いたマルチメディア機能を使うことができる。

DirectXは基本、Visual C++ で利用しなければならない。(Visual Basic や Visual C#では利用が困難または不可能と思われる。)


なおDirectXの実行環境(ランタイム)はWindowsにあらかじめインストールされている。

DirectXをつかったアプリを開発したい場合には、DirectXのSDK(ソフトウェア開発キット)をマイクロソフトのwebサイトから追加でダウンロードしてきてインストールすればいい。

OpenGL編集

一方、DirectX以外で3Dなどの高度なグラフィックス処理を行うには、OpenGLというものを学ぶ必要がある。

OpenGLを用いることで、3次元グラフィックス機能を使うことができる。

OpenGLは、アプリ名ではなく規格名であり、多くのOSが準拠している。

いくつかの企業などが、OpenGLに準拠したライブラリを提供しているので、それをインクルードするなどして、3D描画をする仕組みである。


WinSock2編集

WindowsでもUnixでもネットワーク機能を使うには「ソケット通信」というものを学ぶ必要がある。Windowsでソケット通信するためにはWinSockというものを学ぶ必要がある。

WinSockを用いることで、Windowsのインストールされたコンピュータが、他のコンピュータと通信できる。

Linuxなど別OSでもソケット通信は可能である。というか、もともとBSDなどUnixの通信システムをWindowsが真似た経緯がある。Unixのソケット通信について詳しくはUnixソケットプログラミングを参照のこと。