C言語/おわりに
C言語の次に学ぶべきこと[編集]
この節では、C言語及び標準ライブラリを学んだ後、次に学ぶべきことをまとめる。
といっても、「これら全てを学ばないとプログラムが作れない」というわけではなく、自分でプログラムを作りながら、必要なものを学んでいけばいいだろう。
標準ライブラリ以外のライブラリの使い方[編集]
C言語には標準ライブラリ以外にも、 様々なライブラリが存在する。 自分が使いたい機能を持ったライブラリの使い方を学習して、 何かプログラムを作ってみるといいかもしれない。
例えばゲームプログラミングをWindows上でしたいなら、後述するDirectXを使いやすくまとめた「DXライブラリ」というライブラリがある。
- DXライブラリ置き場 HOME (Direct X は、Windowsを生産販売しているマイクロソフト社が、ウィンドウズ用に開発したライブラリの一種。)
データ構造とアルゴリズム[編集]
データ構造とは、実際のデータをコンピュータのメモリ上でどのように表現するか定める形式である。 アルゴリズムとは、そのデータを用いて計算し問題を解くための手順や考え方である。 データ構造とアルゴリズムを学ぶことで、 より複雑な問題をプログラムで解けるようになる。
他の言語[編集]
ある一定以上複雑なプログラムを作ろうとすると、 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ソケットプログラミングを参照のこと。