プログラミング辞書
 
透明1ドットイメージ
透明1ドットイメージ
この辞書は
「 Visual C++ による
C++ ウィンドウズプログラミング」
に関係した単語を網羅しています。
そのため、内容にやや偏りが存在します。
御了承ください。
透明1ドットイメージ
透明1ドットイメージ
透明1ドットイメージ
透明1ドットイメージ
透明1ドットイメージ
この「プログラミング辞書」は
KAB-studio
の1コンテンツです。
他にもプログラミング関係のコンテンツが
いっぱいあるのでぜひ見ていってください。
 
あと、単語一覧付きの表示方法なら
単語をすこし簡単に探すことができます。
透明1ドットイメージ
透明1ドットイメージ
透明1ドットイメージ
透明1ドットイメージ
透明1ドットイメージ
検索方法
まずページ全体が読み込まれるのを待ちます。
(数分かかるかもしれません)
次にここをクリックしてください。
(注:何も起きません。フレーム選択のためのクリックです)
そうしたらメニューの
編集】−【このページの検索

編集】−【フレーム内を検索
を選んでください。
ウィンドウズならCtrl+FキーでもOK。
表れたダイアログに【検索したい単語】を書き込み、
次を検索】ボタンを押しましょう。
(つまり、ブラウザの検索システムを使うってこと。
このホームページには検索機能は備わってません)
透明1ドットイメージ
透明1ドットイメージ
透明1ドットイメージ
透明1ドットイメージ
透明1ドットイメージ
現在、単語追加は休止中です。
再開日時は未定……。
透明1ドットイメージ
透明1ドットイメージ
透明1ドットイメージ
 
" ( Double Quotes )
 「ダブルクォーテーション」
 記号のひとつ。この記号で囲まれた部分はリテラル文字列とみなされる。リテラル文字列中で " を書き込みたい場合にはエスケープシーケンスの \" を書き込む。
 
&&
 ( Logical AND Expression )
 「論理 AND 演算子」
 C 言語2項演算子のひとつ。
 左オペランドと右オペランドが共に「0以外」の時のみ「0以外」を出力し、それ以外の場合には「0」を出力する。
 たとえば「 1 && 2 」は「0以外」を出力し、「 1 && 0 」や「 0 && 0 」は「0」を出力する。
 
|
 ( Inclusive AND Expression )
 「ビット OR 演算子」
 C 言語2項演算子のひとつ。
 左オペランドと右オペランドの各ビットを比較し、どちらもが0であれば0を、それ以外は1を各ビットごとに返す。
 たとえば「 0x3 ( 0011 ) | 0x5 ( 0101 ) 」は「 0x7 ( 0111 ) 」になる。つまり各ビットにおいて、どちらかが1になっていればそのビットは1となる。
 この演算子はビットフラグで「複数のフラグを組み合わせる」場合に使用することが多い。
 
~ ( Tilde )
 <チルダ、ティルダ、にょろ>
 演算子のひとつ。
 C 言語では「各ビットの補数」もしくは「各ビットの否定」を取る機能を持つ。これは、変数内の各ビットに対し、0ならば1、1ならば0に変換するというものである。
 C++ 言語ではこれに加えてデストラクタを示す演算子としての意味も持つ。クラスと同名のメンバ関数の前に ~ 置くことで、そのメンバ関数がデストラクタとみなされる。
 
::
 ( Scope Operator / Scope Resolution Operator )
 「スコープ演算子 / スコープ解決演算子」
 C++ 言語で使用する演算子のひとつ。
 基本的には名前の解決に使用する。主な使用方法はふたつ。
 ひとつは名前空間での「包む名前と包まれているもの」を継なげる時に使用する。 namespace A { int B } となっているとき、 B のフルネームは A::B となる。このように、名前の「苗字と名前」の区切り記号として使用する。
 もうひとつは「属するクラスの指定」に使用する。たとえば、オーバーライド時には様々な派生クラスに同名のメンバ関数が存在し、そのうちの任意のクラスのメンバ関数を呼び出したい場合に Class::Mem() のように指定する。このように「クラス名とメンバ」の区切り記号としても使用する。
 使用感覚はどちらも同じ、「包む側と包まれる側」を継なぐときに使用すればいい。
 
.com 実行ファイル
 「小さい実行ファイル」
 実行ファイルの拡張子のひとつ。
 通常の実行ファイルの拡張子は .exe だが、比較的小さい実行ファイルには .com が拡張子としてつけられる場合がある。ただしこれは MS-DOS 時代のもので、ウィンドウズでは Command.com など一部の特別なファイルに使用されているのみである。
 
__asm
 インラインアセンブラを使用するためのキーワード
  Visual C++ では、 __asm キーワードのあとのネスト内は、アセンブラで書かれたプログラムを書き込むことができる。この機能により、必要な場合だけ簡単にアセンブラを使用することができる。
 
 
__cdecl
 呼び出し規約のひとつ。
  Visual C++ ではデフォルトの呼び出し規約。つまり普通の関数はこの呼び出し規約となる。
 この設定は「プロジェクトの設定」の「C/C++」−「コード生成」ページの「呼び出し規約」で変えられる。
 
__declspec
  Visual C++ における拡張キーワードのひとつ。
 コンパイル時に変数や関数に対して「ウィンドウズ特有の処理」を行いたい場合にこのキーワードを使用する。
 一般には DLL 使用時・作成時における関数のインポートエクスポートによく使用される。例えば APIヘッダーファイルにおける宣言に必ず付いている WINBASEAPI は、 __declspec( dllimport ) #define で置き換えたものである。これが付いていることで、アプリケーションは各 DLL 内にある API 関数をインポートし使用することができる。
 
 
__fastcall
 呼び出し規約のひとつ。
 基本的に Visual C++ では使用されない。なぜか他の開発環境で多用されている。
 
 
__stdcall
 呼び出し規約のひとつ。
  API に含まれる関数はすべてこの呼び出し規約。また、アプリケーション内の関数でも、コールバック関数など「アプリケーションの外から呼び出される関数」はこの呼び出し規約を指定する必要がある。このように、実行ファイル DLL を越えて呼ばれる関数は、この呼び出し規約である必要がある。
  APIENTRY, PASCAL, WINAPI, CALLBACK __stdcall #define で置き換えたものである。
 
#define
 <デファイン>
 「定義マクロ」
 コンパイル前に、プログラム中の単語を他の単語に置き換えるためのプリプロセッサ
 [ #define 変換前 変換後 ]でプログラム中の単語を置き換えることができる。また「変換前( 引数 ) 」とすることで引数部分をそのまま変換後へと反映させることができるため、関数のような機能を持つこともできる。この関数のような機能を「マクロ」と言う。
 主に5つの使用方法がある。
 「定数値」:リテラルをプログラム中にハードコーディングした場合、検索や訂正が難しくなる。そこで #define を使ってリテラルの別名を作り、その別名をプログラムに使用する方法が取られる。現在は #define の代わりに const int const char *const を使うのが主流。
 「型定義」:移植性を高める理由等により、ある組み込み型の別名を #define で作成し使用する方法。現在は #define の代わりに typedef を使うのが主流。
 「プログラムの簡略化」:プログラムの中で、冗長だが関数などにすることができない部分を #define で定義し置き換える方法。 MFC でよく使用される。
 「関数の代わり」:関数のようなもの、マクロを #define で作成することができる。マクロはプログラムを置き換えるため関数のように呼び出し時のタイムロスがないというメリットがある反面、機械語のコードとソースプログラムの整合性が取れなくなってしまうためデバッグが困難になるというデメリットがある。現在はマクロの代わりにテンプレートinline 関数がよく使用される。
 「コンパイル分岐」: #ifdef 等を使用することで「一部のプログラムだけコンパイルする」ことができるようになる。その鍵となるのが「 #define した単語」である。コンパイルする部分を変更したい時には、その #ifdef の条件にあった #define をすることになる。これは、 Visual C++ では【プロジェクトの設定】ダイアログの【 C/C++ 】−【一般】ページの【プリプロセッサの定義】でも行える。
 
#else
 <エルス>
  #if #ifdef と対にして使用し、「すべての条件に当てはまらない場合」という意味を持つプリプロセッサ
  #if などの条件に当てはまらなかった場合に当てはまるのが #else である。これにより、「条件に合わない場合」の処理を行うことができる。逆に言えば、 #else は「条件に合った場合」には実行されないということである。
 
#ifdef
 ( if Defined )  <イフデフ>
 プログラムの一部分に対し、ある存在が定義されているかどうかで「コンパイルするかどうか」を決めるためのプリプロセッサ
  #ifdef の右隣に何か単語を置いて使用する。その単語が #define によって定義されていれば、 #ifdef から #endif までの範囲はコンパイルされる。もし定義されていなければ、 #ifdef から #endif までの範囲はコンパイルされない。この仕組みによって、プログラムの一部に対し「場合によってコンパイルするかしないか決める」ことができる。
 ただし、実際に「定義されているかどうか」を調べるのは面倒なため、プログラムの可読性を下げる可能性がある。
 
#import
 「運び入れる」
 タイプライブラリを読み込むためのプリプロセッサ
 他のコンポーネントに含まれる関数クラスを使用する場合には「タイプライブラリ」からその情報を得る必要がある。そのタイプライブラリファイルを指定するためのプリプロセッサが #import である。
  #include のタイプライブラリ版と考えるとよい。
 
#pragma
 <プラグマ>
 「現実的」
 コンパイラリンカに指示を出すためのプリプロセッサ
 コンパイラやリンカ、 OS の機能をプログラム上から指定する場合、これまでは「特定の環境でしか使えないキーワード」を使用しなければならかなった。 #pragma は、これらを肩代わりするものである。
  #pragma にパラメーターを加えてプログラム中に書き込むことで、コンパイラ等に指示を出すことができる。たとえば Visual C++ には #pragma pack というアライメントを設定するためのものがある。
  #pragma のパラメーターは、通常コンパイラごとに異なる。パラメーターが「そのコンパイラに認識できないもの」であった場合、コンパイラは無視するため、特定のコンパイラに特化した #pragma を指定しやすいというメリットがある。
 
#undef
 ( Un Defined )  <あんでふ>
  #define された単語を無効化するためのプリプロセッサ
  #define は「強制的に単語を置き換える」ため、場合によっては特定の単語の #define が邪魔になる場合がある。 #undef は、このような場合に #define された単語を解除するために使用する。
 
0x
 16進数を表すときに使用するプレフィックス
 リテラル整数を16進数で表したい場合、その整数値の先頭に 0x を付けることで、その整数値が16進数としてみなされるようになる。
 もちろん、16進数も10進数も、整数値の表現方法のひとつにしかすぎないため、変数中の整数値にこのようなプレフィックスを付ける必要はない。
 
1バイト文字
 ( Single-byte Character )
 アルファベットおよび数字など、1バイトサイズで表現できる文字半角文字とも言う。
 ASCII コードで表現される英数文字と、一部の特別な文字は1バイトの整数値で表現される。この種の文字を「1バイト文字」と呼ぶ。「一部の特別な文字」にはその国の特別な文字を使用することが多く、日本では半角カタカナが割り当てられている。
 アルファベットや英数文字、カタカナは2バイト文字としても表現できるが、2バイト文字としての文字と、この1バイト文字としての文字はまったくの別物であることに注意。
 
2進数 ( Binary Digit )
 「01数」
 一桁に「」と「」しか入らない数字
 最初は0から始まり、1増やすと1に、さらに1増やすと(2はないため)繰り上がり10、さらに11、100、と数えていく方式。
 メモリなど、コンピューターの中身はスイッチの「オン」と「オフ」の並びとなっており、これを数字として表すのに2進数が使用される。この場合、一桁の単位がビット、8桁でバイトとなる。
 ただし、そのまま2進数として表すと桁数が膨大となってしまうため、2進数の4桁を一組とした16進数が一般的には使用される。
 特定の2進数が「何を意味するのか」は、場合場合によって変わるので注意。その変換方法を定義するのがということになる。同じ2進数でも、その値を int と捉えるのか double と捉えるのかで変わってくる、ということである。
 
2バイト文字
 ( Double-byte Character )
 一般的なひらがな、カタカナ、漢字の文字全角文字とも言う。
 MBCSUnicode を用いて日本語の文字列を表現した時、2バイトで表現した1文字を「2バイト文字」と言う。
 アルファベットなどと違い、漢字などは文字数が多いため、1バイト文字として表現することはできない。そこで2バイトを使用して漢字等を表現する。これがひるがえって、「2バイト文字」と言えば「漢字やひらがな」を指すことになる。
 
16進数 ( Hexadecimal Digit )
 「Fまで数」
 一桁を「」から「」そして「」から「」で表した数字
 2進数をそのまま表すと桁数が膨大となってしまう。そこで使われるのが、2進数の4桁を一組とした「16進数」である。
 16進数は、2進数4桁を一桁にまとめて表す。そのため一桁には2の4乗=16までの数字が入る。これを表すため、0〜9に加えてA〜Fを使って表現する。4桁のため、16進数一桁は4ビットであり、16進数2桁は1バイトとなる。「1バイトを16進数2桁で表す」ため、2桁一組で表示されることが多い。
 リテラル整数を16進数で表示する場合には、 0xプレフィックスとして付ける必要がある。
 
49.7日
 ウィンドウズでの活動限界時間
 ウィンドウズは内部に時計を持っており、そのいくつかは起動時からの時刻を計っている。
 その中には ms (ミリセカンド)単位でのカウントを32ビット整数値として格納しているものがある。当然32ビット、つまり 4294967295 ms 、約49.7日までしか値を保持できない。これを超えると0にリセットされる。もしこの「0に戻る」ときを確認していない場合、アプリケーションがエラーを発生する場合がある。
 一部のウィンドウズの Vtdapi.vxd はこの確認をしていないため、リセットされた時点でエラーが発生し、ウィンドウズがハングアップする。この問題により、一部のウィンドウズは49.7日以上使用し続けることはできない。
(詳細はサポート技術情報の J047591 をご覧ください)
 
ACM
 ( Association for Computing Machinery )
 「国際計算機学会」
 アメリカに籍を置く組織。「国際大学対抗プログラミングコンテスト」を開催しており、日本の大学もこの大会に参加している。
 
Active Directory
 <アクティブディレクトリー>
 Microsoft 製アプリケーションのひとつ。ネットワーク上に散在するユーザー情報等をまとめて管理するためのアプリケーション。
 
ActiveMovie
 <アクティブムービー>
 動画を再生するためのダイアログボックスコントロール
 現在は DirectXDirectShow に名称が変更されている。
 
 
ActiveX<アクティブエックス>
 COM インターフェイスを中心とするアーキテクチャーの総称。もしくは、 COM インターフェイスを持つDLLインターネットを通じてブラウザの機能の一部として組み込むこともできる。
 
AFX
 ( Application Framework )
 MFC が用意した関数マクロに付いているプレフィックス
 MFC は全体で様々な処理を行う構造(=フレームワーク)となっており、これによりメッセージ等が処理される。そのシステムに関わっていることを識別するため、関数には Afx 、マクロには AFX 、グローバル変数には afx がプレフィックスとして付いている。
 基本的には「 MFC の目印」と考えればよい。
 
ANSI
 ( American National Standards Institute )
 「世界標準」
 <アンジー>
 アメリカの組織のひとつ。標準規格を策定するための機関。
 C 言語C++ 言語の文法規則も、 ANSI によって策定されている。これらを ANSI C および ANSI C++ と呼ぶ。この ANSI による規定を守っているコンパイラを「 ANSI 準拠コンパイラ」と呼ぶ。多くのコンパイラは ANSI 準拠を謳っている。
 プログラムの移植性を高める場合にはできる限り ANSI 規格に則ったプログラムを組むべきだが、コンパイラや OSライブラリの関係でそれが難しい場合も多い。
 
API( Application Programing Interface )
 広義としては、特定のアプリケーションを作成するためのライブラリ SDK と同意。
 狭義としては、ウィンドウズアプリケーションを作成するための必須ライブラリ。もしくはその中に含まれる関数。ウィンドウズプログラミングの話題としては、こちらを指すのが一般的。
 ウィンドウズ用ライブラリとしては非常にハードウェアレベルに近いライブラリであり、 OS の操作に関してたいがいのことができる。各種DLLとして提供されており、この中に含まれる関数を呼び出す形で使用する。VC付属の MFCC ランタイムライブラリはこの関数を使用して機能している。つまりこのAPIがなければウィンドウズアプリケーションは作成できないと言える。
 ライブラリとしての使い勝手はいいとは言えない。C言語のみの作成も考慮されているため関数と構造体のみで構成されている。また、ソースコードが公開されていないうえに使用方法にクセのあるものが少なくないため、初めて使う関数はドキュメントを熟読したりテストを行ったりする必要がある場合が多い。
 
APIENTRY
 ウィンドウズ API 関数宣言に付いている単語。
 これは呼び出し規約を統一するためのもので、 __stdcall #define で置き換えたもの。 WINAPI と同じ。
 
argc
 <アーグシー>
  main() の第1引数。
 アプリケーション実行時に渡されたパラメーターの個数を格納する。型は int 。実際のパラメーターは argv に格納されている。
 
argv
 <アーグブイ>
  main() の第2引数。
 アプリケーション実行時に渡されたパラメーターを格納する。文字列ポインタとなっており、そのポインタを配列として使用することで、各パラメーターを取得することができる。パラメーターの個数は argc に格納されている。
 
ASCII
 ( American Standard Code for Information Exchange )
 「標準英文字」
 いわゆる「半角英数文字」を表す文字コード
 1バイトサイズの整数と、それに対応する英数文字との対応表を「 ASCII 」もしくは「 ASCII コード」と呼ぶ。コンピューターはこの変換表を用いて、整数値を英数文字へと変換する。
 英数文字のみなので、基本的には7ビットサイズの整数値にすべての英数字が含まれている。だが実際には8ビットサイズ整数値として扱われ、その余分な領域に地域ごとの文字が割り当てられている。ドイツ語圏であればウムラウト、日本であれば半角カタカナといったように。
 日本語用の文字コードは、主に2バイトで1文字を表す。しかし、たとえ日本語の文章だとしても、文章中の半角英数文字は ASCII コードに割り当てられた1バイトの文字として使用される。つまり、日本語の文章は、2バイトが1文字の部分と1バイトが1文字の部分とが混在しているということになる。日本語文章の表示には、この区別を付ける必要があるというわけである。「インターネット半角カタカナが禁止」されているのは、文字コードによってはこの区別が付けられなくなってしまう場合があるためである。
 
 
ASPI ( Advanced SCSI Programing Interface )
 SCSI機器を操作するための関数。通常、デバイスを操作するためにはデバイスドライバーを作成する必要があるが、この ASPI があれば、SCSI機器を通常のC言語で操作することができる。
 アダプテック社から提供されている wnaspi32.dll という DLL を(ヘッダーファイルライブラリファイルはないため)実行中リンクして使用する。
 
 
ATL
 ( Active Template Library )
 <えーてぃーえる>
  MFC に代わる Microsoft 推奨の新しいテンプレートライブラリ
 本来は ActiveX と呼ばれるCOMを作製するためのライブラリ。レジストリへの登録機能等も持っている。
 だが、テンプレートを使用したシンプルなAPIラッパークラスでもあり、継承が複雑化していないため、巨大化しすぎたMFCを継ぐ存在と言われている。ただし、まだ作製段階でもあり、また当面はActiveXを作製することのみに重点が置かれるであろうことが予測されるため、通常のアプリケーション作製には影響していない。
 
Autoexec.bat
 <オートエグゼキューションバッチファイル>
 「ウィンドウズ心臓ファイル」
 ウィンドウズが起動したときに読み込まれる、バッチファイルのひとつ。
 ウィンドウズ起動前に、環境変数などの設定を行うためのファイル。たいがいはウィンドウズをインストールしたドライブに置いてある。このファイルの書き換えは致命的な問題になりかねないので注意すること。 MS-DOS 時代の名残のひとつ。
 
B 言語
 ( B Language )
 C 言語の元となったプログラミング言語。非常に古いものであり、現在はほとんど使用されていない。
 ちなみに本辞書は C / C++ 言語 中心なので B 言語に特化した単語は掲載しない予定です。ごめんなさい。
 
BCD
 ( Binary Coded Decimal code )
 「2進化10進数」
 4ビットで10進数ヒトケタを表すデータ方式
 通常の数値表現では、ビットすべてを使用して値を表現する。そのため、4バイトサイズであれば40億( 0xFFFFFFFF = 4294967295 )までの値を表現できる。
 「 BCD 」では、4ビット中で「9」までしか使用せずに値を表現する。つまり 0xA から 0xF までは使用しない。よって 1234 という値は 0x1234 というデータで表す。
 もちろん、通常 0x1234 という値は 4660 とみなされてしまうため、 BCD として 1234 と表示するためにはそのための変換が必要となる。また、無駄の多い格納方法のため、4バイトサイズで 0x99999999 = 99999999 までしか表現できない。しかし、値としての表現方法が分かりやすい、桁の拡張がしやすいなどのメリットもある。
 
BNF
 ( Backus Naur Form )
 「言語規定言語」
 特定の言語仕様を記述するためのもの。
 言語には必ず「文のルール」が存在する。そのルールを記述するもののひとつが「 BNF 」である。ちなみに Backus と Naur は人名である。
 たとえばルールを「文は式からなり、式は数字・記号・式もしくは数字・記号・数字からなる」のように決めることができる。こういったルールを用いて言語処理を行うことで、文章がその言語のルールに則っているかどうか調べることができる。
 BNF の文法は明確に決まっており、上の例であれば「<文> := <式>、<式> := <数字><記号><式>|<数字><記号><数字>」となる。
 現在、これを元にした拡張 BNF が広く使われている。
 
 
bool
 ( boolean )
 C++言語で使用するデータ型の一種。 true false のみを格納でき、主に「成功」と「失敗」のフラグとして使用する。
 Cの BOOL int と同じであり、 TRUE FALSE も単なる整数値であったため、あいまいな部分が多く、それをちゃんとした型として改善したものが bool と言える。
 これまで BOOL だったものを bool に変換する場合、 BOOL int として使用し、整数値を返している場合があることに注意。
 
BSTR
 ( Basic String / Binary String )
  Visual Basic で使用される文字列型。 Visual C++ でも COM を通して文字列を受け渡しする場合に BSTR を使用する。
 基本的には Unicode を使用した、 wchar_t配列である。しかし、以下のふたつの点で、通常の Unicode と異なる。
 ひとつは、文字配列の前に文字列の文字数が格納されているという点。これにより、簡単に BSTR 型データを作ることはできない。もうひとつは、このように「文字列の長さ」が分かることから、終端文字が「終端」を示さないという点。よって、通常の文字列用関数は使用できない場合がある。
  BSTR 型文字列を作成する場合、 API SysAllocString() などを使用する。また、 _bstr_t というクラスも用意されており、これを使用することもできる。 ATL にも CComBSTR というクラスが用意されている。
 
C 言語 ( C Language )
 <しーげんご>
 プログラミングを作成するための言語のひとつ。
 非常にハードウェア寄りのプログラムを書くことができるため、多くの OS 、そしてそれに付随するライブラリに使用されている。そのため、プログラミングにおいてはなくてはならない言語となっている。
 現在はこれの拡張版である C++ 言語が主流。
 
C++ 言語 ( C++ Language )
 <しーぷらすぷらすげんご>
 プログラミングを作成するための言語のひとつ。
 C言語を元にクラステンプレートなどを加えた言語。一般的にはオブジェクト指向プログラミング言語であると言われる。
 ウィンドウズにおいては Visual C++ Borand C++ Builder Cygnus gcc for Win32 などの開発環境コンパイラがこの言語を使用してプログラムの作成を行う。
 
C# 言語
 ( C Sharp Language )
 <シーシャープ言語>
 プログラミング言語のひとつ。
  次期 Visual Studio に装備される予定のプログラミング言語。 C++ 言語Java の中間的言語で、 C++ 言語よりも安全性が高く、 Java よりも自由度が高い。
 ちなみに本辞書は Visual C++ 中心なので C# に特化した単語は掲載しない予定です。ごめんなさい。
 
 
C ランタイムライブラリ
 ( C Run-time library / CRT )
 C 言語において、文字列操作やファイル操作等を行う関数
 C 言語の特徴のひとつとして「機種依存性のある機能は装備しない」というものがあり、そのためこういった機能は「 C 言語そのもの」としては備わっていない。
 が、それではあまりにも不便ということで「 ANSI C 」という共通仕様に基づいた関数群が存在する、それが「ランタイムライブラリ」と呼ばれるものである。
 こういったシステムになるため、 OS開発環境によってある関数やない関数が存在したり、同じ関数でも微妙な違いが存在したりする。逆にこれが、こういったプラットフォームの違いをはっきりとさせ、移植を容易にさせているとも言える。
 C++ 言語には、これの代わりとなる標準 C++ ライブラリが存在するが、まだドキュメントが少ないこと、現在も改変中であることなど、まだ不安な要素があるため、ランタイムライブラリの必要性は依然高い。
 正式名称は標準 C ライブラリ
 
CAB
 ( Cabinet File )
 「保管ファイル」
 <キャビネットファイル>
 圧縮ファイルフォーマットのひとつ。
  Windows で使用される圧縮ファイル。拡張子は .cab 。インストールされるファイルに使用されることが多い。
 
cc ( C Compiler )
  UNIX 系 OS に付属しているコンパイラ
 たいがいの UNIX OSに備わっている、 C 言語プログラムのコンパイルリンクができるツール。
 場合によっては、古いスタイルの C 言語プログラムしかコンパイルできないものしかインストールされていない可能性がある。もしあるなら、 gcc の使用を勧める。
 
CALLBACK
 ウィンドウズ API 関数宣言に付いている単語。通常コールバック関数に付いている。
 これは呼び出し規約を統一するためのもので、 __stdcall #define で置き換えたもの。 WINAPI と同じ。
 
CGI ( Common Gateway Interface )
 <しーじーあい>
 インターネットなどで、サーバー側のアプリケーションを実行するシステム。もしくは実際に実行されるアプリケーション
 通常、ホームページを出力する HTTP サーバーは「求められたファイルを渡す」という機能のみを行う。それがたとえ、拡張子が .exe であってもである(もともと UNIX 系では拡張子に意味がないというのもある)。
  CGI が使用できるようサーバー側の設定を行うことで、特定の拡張子のファイルは直接渡されず、サーバー側で実行され、その出力結果がクライアント(多くはネットスケープのようなインターネットブラウザ)へと渡される。このようなシステム、もしくは実行されるファイルを CGI と呼ぶ。
  CGI アプリケーションはサーバー側で実行されるため、サーバーにファイルを残すといった機能も実現できるが、その反面、サーバー側にダメージを与えるプログラムも実行できてしまう。そのため、多くのプロバイダではユーザーが作成した CGI アプリケーションを使用できない設定となっている。
 
char ( Character )
 <キャラ, カラ, チャー>「文字」
 バイトサイズの整数値C言語に初めから組み込まれている型のひとつ。
 一応整数値型のため整数値計算を行うことができるが、サイズが1バイトしかないため -128 から 127 までの値しか格納できないため、計算用として使われることは滅多にない。
 それよりも「文字ひとつ」を表すための型として一般的に使われている。通常は char 型の配列を作成し、それをもって文字列とみなす。また、日本語に含まれる漢字などはとても char ひとつには入りきらないため、 MBCS を用いて char ふたつ以上をひとつの文字に割り当てるか、 wchar_t を用いるかする必要がある。
 
cin
 標準 C++ ライブラリグローバル変数
 「標準入力」を入力元にした istream クラスの変数。この変数に対して「 >> 」を介して変数を渡すことで標準入力から入力できる。
 標準 C++ ライブラリのオブジェクトなので std 名前空間で囲まれているため、 using namespace std; もしくは std::cin などとする必要がある。
 これは入力専用。出力には cout を使用する。
 
CLI
 ( Common Language Infrastructure )
 「共通言語環境」
 多くの OS で使用できるアプリケーションを制作し実行するための環境
  CLR などのように、 OS に依存させないようにするための環境、もしくはそのための規格。 CLI が用意されていれば、 CLI に準拠したアプリケーションは実行できることになる。
 
CLR
 ( Common Language Runtime )
 「共通言語ランタイム」
 ライブラリの一種。 OS やプログラミング言語に依存しない特殊なライブラリ。
 次期 Visual Studio に添付される予定のライブラリ。多くの OS で動作し、様々な言語から呼び出すことができる。
 ライブラリは通常、 OS や言語によって異なる。たとえば「ウィンドウを表示する」という機能ひとつでも、 OS や言語が異なれば呼び出す関数が大きく異なる。 CLR は多くの OS で動作し、多くの言語から呼び出すことができるため、 CLR ひとつ憶えればどの環境でもプログラムの作成が容易になる。
 
CLS
 ( Common Language Specification )
 「共通言語仕様」
 多くのプログラミング言語で利用できるライブラリを作るための仕様
  CLR などのように、言語に依存しないライブラリが存在する。その様なライブラリを作るための仕様のひとつが CLS である。 CLS に準拠する形式でライブラリを作成することで、再利用しやすくなる。
 
CLSID( CLaSs IDentifier )
 COMインターフェイスの入った ActiveX ファイルを識別するための UUID
  ActiveX ファイルはインターネット上で公開される場合があるため、その存在を世界中で一意に識別できなければならない。そのために付けられる識別用文字列が CLSID である。
  CLSID_ShellLink なども CLSID のひとつ。これらは Shlguid.h でグローバル変数として作成されている。
 
 
COM
 ( Component Object Model )
 <コム>
 ある実行ファイルDLL から、他の実行ファイルや DLL にあるクラスを動的に使用するための仕様
  DLL などを用いてプログラムの「分散化」や「コンポーネント化」を行う場合、必要なものだけを動的に組み込める、つまり「プラグイン」としての機能が求められる。この場合、通常関数ポインタを取得しそれを元に関数を呼び出すが、この場合にはクラスを使用するのが難しい。
 そこで抽象クラスを用いたインターフェイスを使用することで、関数ポインタを仮想関数に置き換え、これによりクラスを使用する方法が採られた。この方法が「 COM 」である。
 つまりは「プラグイン仕様」のひとつである。
 現在はネットワークを介してアクセスできる機能( DCOM )も取り込み、シェル拡張 DirectX などあらゆる場面で使用されている。
 プロセス間関数呼び出しも参照のこと。
 
COM+ <コムプラス>
  COM の次世代規格
 詳しいことはよく分からないが、どうやら「言語レベルで COM をサポートする」ということらしい。たとえば #import プリプロセッサはその「サポートするためのもの」らしい。
 
 
COM インターフェイス
 ( COM Interface )
 COM に準拠したクラス
 COM はDLL内で動的にクラスの変数を作成する。メンバ関数はすべて仮想関数であるためポインタとして出力できる。使用する側は抽象クラスで受け取る。このようにして関数ポインタを仮想関数に置き換え、クラスとして使用できるようにしている。
 ちなみに「抽象クラス」のことをインターフェイスとも呼ぶため、このような名称になっていると思われる。
 
const
 ( constant )
 <コンスト>
 「不変な」
 変数を宣言するときに付けるキーワードのひとつ。
 「変数の値」「ポインタの値」「ポインタおよび参照が指し示す値」が変更できないようにする。つまり const な変数は「読み取り専用」「リードオンリー」ということである。もし const な変数に対して書き込みを行おうとした場合、コンパイラがエラーを発生させる。
  const はふんだんに使うべきであり、使える部分にはすべて使うのが望ましい。そうすることで「変数が書き換えられる範囲」を大幅に狭めることができ、保守性が大幅に向上する。
 といっても、 const キャストによって一時的に取り除くことができてしまうため、過信は禁物。
 また、クラス変数に const を適用する場合には、そのクラスが const メンバ関数を持っている必要がある。現状では多くのクラスライブラリ const メンバ関数をサポートしていないため、使いたくても使えない場合もある。
 
CORBA
 ( Common Object Request Broker Architecture )
 <コルバ>
 「共有物要求仲介機構」
  プロセス間関数呼び出しついての仕様のひとつ。
 COMDCOM とは別の方法で、プロセス間での関数呼び出しを実現している。ちなみに IDL の仕様も違うので注意。
 
cout
 標準C++ライブラリグローバル変数
 「標準出力」を出力先にした ostream クラスの変数。この変数に対して「 << 」を介して変数を渡すことで標準出力に出力できる。
 標準C++ライブラリのオブジェクトなので std 名前空間で囲まれているため、 using namespace std; もしくは std::cout などとする必要がある。
 これは出力専用。入力には cin を使用する。
 
CString
 <しーすとりんぐ>
 MFCクラスのひとつで、文字列を格納するためのもの。
 文字列クラスとしてはおそらく最も使いやすい。格納できる文字列のサイズは自動的に変更されるためサイズを気にする必要がない。また各種演算子オーバーロードされているため + や = などで操作することができる。 CString::Format() などの成型用メンバ関数も備えている。 MFC に含まれることもあって MFC の他のクラスとの親和性が高いのも特徴。
 C++ 言語には文字列型は存在しないため、その代わりに、プログラミング初心者へと提供される文字列型と言っていい。ただし、メモリ管理など std::string と比較すると見劣りする部分も多々あるため、 CString が文字列クラスとして最良の型とは言い難い。
 
CSV
 ( Comma Separated Value )
 「カンマ区切りデータ」
 各データがカンマ, )で区切られた文字列
 各データは、整数値も何もかもすべて文字列に変換され、複数行の文字列として格納される。各データはカンマで区切られる。
 テキストファイルとして保存できるため、多くの OS およびアプリケーションで使用できるメリットがあることから、ほとんどの表計算アプリケーションやデータベースアプリケーションは CSV 形式でデータを出力することができる。
 
CUI ( Character User Interface )
 <しーゆーあい>「文字的操作環境」
 文章だけの入出力環境
 具体的には「コンソール」や「 DOS 窓」のような環境。文字を入力し、文字が出力される。
 古い入出力方法であり、習熟しないと非常に使いづらいなどのデメリットが多いが、コンピューターにかかる負担が少ないなどのメリットもある。
  Visual C++ の場合、プロジェクトの作成時に「 Win32 Console Application 」を選ぶことで CUI アプリケーションを作成することができる。
 現在は GUI が主流。
 
DBCS ( Double-Byte Character Sets )
  MBCS の2バイト版。
  char 配列の2文字分で漢字1文字を表す。どうやって表すかは文字コードによって変わる。ウィンドウズなら Shift_JIS の文字コードを使用し、APIなども Shift_JIS に対応している。
 
 
DCOM( Distributed COM )<でぃーこむ>
 COMプロセス間関数呼び出しについての拡張仕様
 COMをネットワークを超えて使用するために、COMに加えられた仕様。 IDL を使用したインターフェイスの統一や UUID による識別、アパートメントスレッド化やマーシャリングなどがそうである。
 
DDB ( Device-Dependent Bitmap )
 「ハードウェア依存ビットマップ」
 画像フォーマット(保持形式)のひとつ。
 画像の点ひとつひとつの色を配列のような形で保持する形式。ただし、その色は出力するハードに依存する。「赤」を出力しようとしても、実際にどんな色が出力されるかはモニターやグラフィックボードなどによって決定されてしまうのである。
 基本的に過去の遺物。一般的なビットマップとも別物と考えるべき。今はDIBが主流。
 
DDE ( Dynamic Data Exchange )
 「データ交換」
 プロセス間でのデータの受け渡しをするためのウィンドウズの機能
 ウィンドウズでは、メモリはプロセスごとに独立しているため、文字列などを渡すのにポインタを使用できない。そこで使用されるのが DDE である。
  DDE を使用する場合、 API GlobalAlloc() GlobalAddAtom()を使用してメモリの動的確保を行い、 WM_DDE_DATA などのプレフィックス WM_DDE_ メッセージを送受信することで行う。
 仕組みが複雑なことや、プロセス間関数呼び出しなどの方法があるため、現在はあまり使われていない。
 
DDK ( Device Driver Kit / Driver Development Kit )
 <デバイスドライバーキット>
 デバイスドライバーを作成するためのライブラリ
 デバイスドライバーを作成するためには、この DDK に含まれるライブラリを使用する必要がある。 DDK は MSDN の高レベルのものに付いている。
 
Delphi <デルファイ>
 インプライズ社製開発環境
 言語に Object Pascal を使用した、コンポーネント中心のウィンドウズ向け開発環境。
 ちなみに本辞書は Visual C++ 中心なので Delphi に特化した単語は掲載しない予定です。ごめんなさい。
 
DIB ( Device-Independent Bitmap )
 「ハードウェア独立型ビットマップ」
 画像フォーマット(保持形式)のひとつ。
 ビットマップの、「キャンバスとして」および「画像ファイル形式」のものと同じと考えていい。つまりデバイスコンテキストに張り付いているビットマップや、一般的なファイル形式としてのビットマップは DIB 形式である、ということである。
 よって「ビットマップを扱う」=「 DIB を扱う」がだいたいにおいて成り立つので、 DIB について気にする必要はほとんどない。
 
DIID ( Dispatch IID )
 「ディスパッチインターフェイスID」
 特定の IDispatch インターフェイスを示す IID
  COM インターフェイスを取得する場合には IID を使用して指定する。この中でも、ディスパッチを行うインターフェイス IDispatch を取得するための IID DIID と呼ばれ、プレフィックス DIID_ が付く。
 
DirectInput  <ダイレクトインプット>
  DirectX に含まれるグループのひとつ。ジョイスティックなどによる入力を管理するためのライブラリ
 通常、ジョイスティックやマウスなどによる入力はメッセージとして送られそれを処理することで対応することになるが、これだと処理に時間が掛かってしまい、ゲーム等には利用できない。 DirectInput を使用することで、ジョイスティックなどハードウェアからの信号を直接受け取ることができるようになり、これによりレスポンスを向上させることができるようになる。
 
DirectShow <ダイレクトショウ>
  DirectX に含まれるグループのひとつ。動画操作などを行うためのライブラリ
 既存の動画フォーマット(たとえば AVI )の再生等を得意とするため、ムービー関係の操作に使用される。
 
DirectSound
 <ダイレクトサウンド>
  DirectX に含まれるグループのひとつ。音声操作などを行うためのライブラリ
 音声の再生、編集、録音等を行うためのライブラリ。 MCI よりも自由度が高い。
 
DirectX <ダイレクトエックス>
 「ウィンドウズ標準ゲームライブラリ」
 ウィンドウズ向けの、ゲームの作成を目的としたマルチメディア操作用ライブラリ
 ウィンドウズでの描画はウィンドウズシステムを通して行われるため、処理に時間が掛かるものが多い。そこで作られたのが、システムを極力介さずマルチメディア機能を使用することができる DirectX である。
  DirectX は、描画を行う DirectDraw 、3DCG処理を行う Direct3D 音声処理を行う DirectSound 、ジョイスティック等からの入力を処理する DirectInput 、ネットワーク処理を行う DirectPlay MPEG などの既存動画フォーマットを処理する DirectShow などがある。
  DirectX API から COM インターフェイスを取得しそれを操作する。そのため、使用にはある程度 COM についての知識が必要となる。
 
 
DLL
 ( Dynamic-Link Library )
  「動的リンクライブラリ」
 <でぃーえるえる>
 ライブラリの一種。
 スタティックライブラリオブジェクトファイル実行ファイルのように「プログラムにロードできる」形式にしたようなもの。通常、拡張子は .DLL 実行ファイルが実行されたとき、もしくはその途中でメモリ上にロードし、中のクラス関数を使用できる形にしている。
  DLL のリンク方法には DLL の実行時リンク DLL の実行中リンク DLL の遅延ロードの3つがある。
 多くの実行ファイルから呼び出した場合、他のライブラリ形式よりも消費するメモリやディスク上のサイズが少なくて済むという利点があるが、現在のコンピューターの性能を考えればその利点が微々たる点、システムが複雑化しすぎてバグの解消量よりも発生量の方が高くなる場合が多い点を考えると、現状には合っていないのではないかと言われている。
 だが、ウィンドウズそのものが DLL の塊として存在していることや、プラグインや COM など、違った形での DLL の使用方法も出てきており、これからも使われていくであろうと思われる。
 
DllMain()
  DLL がロードされた時にまず最初に呼ばれる関数
  DllMain() DLL エントリーポイントである。ロードされたときにまず呼ばれるため、この中で必要な初期化を行う。
 
DLL の遅延ロード ( Delayload )
 「あとからリンク」
  DLL 後からリンクする方法。
  DLL の実行時リンク DLL の実行中リンクの中間的機能を持つ。
 リンク方法は「 DLL の実行時リンク」とほとんど同じで、あとリンカのオプションとして /DELAYLOAD と「あとから組み込みたい DLL 」を指定するだけである。
 指定された DLL は、実行時には組み込まれず、実際に DLL が使用される段階になって初めて組み込まれる。
 この方法のメリットは、不必要な DLL を読み込まない、という点である。これにより、場合によってはメモリや時間を節約できる。ただし、「実行中リンク」で行えるような細かい操作を行うには、特殊な処理が必要となる。この方法には特別な処理をするためのフックが用意されており、これを使用することで「実行中リンク」に近いことも行える。
 
DLL の実行時リンク / DLL の暗黙的リンク
 ( Load-time Dynamic Linking )
  DLL を自動的にリンクする方法。 DLL の一般的な使用方法。
 リンカに、使用したい DLL ライブラリファイルを渡すことで、自動的にその DLL が使用できる。
 実行ファイルを実行してプロセスが作られるとき、リンカを使って設定した DLL が自動的にリンクされる。これにより DLL を簡単に使用することができる。
 デメリットとして、 DLL を実行中に変更することができなこと、また、必要な DLL が見つからなかった場合に OS から(分かりにくい)エラーが出され、実行ファイル側でそのエラーを処理できないということ、また、実行中に使用するかどうか分からない DLL もリンクしなければならないこと、などがある。これらの問題に対処する必要がある場合には DLL の実行中リンク DLL の遅延ロードを使用する。
 
DLL の実行中リンク / DLL の明示的リンク
 ( Run-time Dynamic Linking )
 「プログラムの中でリンク」
  DLL プログラム上でリンクする方法。 DLL の特殊な使用方法。
  DLL 内の特定の関数を直接呼び出すことができるのが、この方法である。まず API LoadLibrary() を使って特定の DLL を実行ファイルに組み込む。次に GetProcAddress() を使って DLL 内にある使いたい関数のアドレスを取得し関数ポインタに格納する。ただし「使いたい関数」は装飾名で指定する。取得した関数ポインタを使用するとこで、目的の関数を呼び出すことができる。使用した後は FreeLibrary() で DLL を解放する。
 この方法のメリットは、 DLL を使用時に使い分けることができたり、 DLL が見つからない場合に柔軟な対応ができることである。反面、この方法は関数ポインタを使用するため注意が必要であり、また、膨大な量の DLL や関数を使用する場合には向かない。前述のメリットを使用する必要がない場合には DLL の実行時リンク DLL の遅延ロードを使用する方がいい。
 また、この方法ではクラスを使用するのが難しい。メンバ関数と普通の関数では呼び出し方が違うからである。どうしても使用したい場合には COM のような特殊な方法が必要となる。
 
DMI( Desktop Management Interface )
 ネットワーク上のコンピューターを操作するためのAPI
 ネットワーク上に継ながれたコンピューターのハードウェアやソフトウェアを一元管理するためのAPI。このAPIを使用しすることで OS や機種間での依存性を考慮せず管理することができる。
 
DML
 ( Data Manipulation Language )
 「データ操作言語」
 データベース用語のひとつ。データベースの中身を操作するためのコマンド
 
DOM
 ( Document Object Model )
  XML 文章を解析・作成するためのライブラリ
  XML 文章は構造体のようになっており、文章内の単語や文がメンバ変数のように定義されている。しかし、これを通常の文字列として操作すると大きな手間がかかる。そこで、 XML 文章を解析するためのライブラリが必要となる。
 その解析を行うためのライブラリのひとつが DOM である。 DOM は XML の構造をツリー形式として解析し、それぞれのデータに対しての読み取り・書き込みが簡単にできるようになっている。
 
DOS/V
 ( MS-DOS VGA )
 <ドスブイ>
  MS-DOS の種類のひとつ。だが一般には、この OS を使用することができるパソコン本体を指すことが多い。
 日本ではかつて NEC の PC-98xx パソコンが普及していたが、そのパソコンには専用の日本語 MS-DOS が備わっていた。
  DOS/V はこれとは別の日本語 MS-DOS であり、また実行できるハードウェア規格も異なっていたため、パソコンそのものの違いとして「 PC-98 系と DOS/V 系」という区別が生じた。そのため、 DOS/V と言うと一般にはパソコンそのものを指すことが多い。
  DOS/V は規格を公開することで多くの企業が DOS/V パソコンを販売するようになり、ウィンドウズの規格である「 PC98 規格」を NEC が受け入れたことで、 PC-98xx 系パソコンは製造されなくなる。そのため、現在のパソコンはほとんどすべて DOS/V の流れを汲むものとなっている。
 
dynamic_cast
 <だいなみっくきゃすと>
 「ポリモーフィズム専用キャスト」
 特定のポインタもしくは参照を、継承関係にある他のポインタもしくは参照へと安全キャストする場合に使用する演算子
 ポリモーフィズムを行う場合、子クラスを指すポインタもしくは参照から、親クラスを指すポインタもしくは参照へとアップキャストを行う。
 一度アップキャストを行ったポインタもしくは参照は、見た目には実際にどのクラスの変数なのか分からない。そのため、再びダウンキャストを行い元の型に戻す場合には危険が伴う。
 そこで使用されるのが「 dynamic_cast 」である。この演算子を使用してダウンキャストを行った場合、もしそれが可能ならばそのままポインタもしくは参照を返し、それが不可能であれば NULL を返すかもしくは例外を投げることになっている。この結果を確認することで、ポインタもしくは参照が本当にその継承先クラスのものなのかどうか確認してから使用することができる。
  dynamic_cast はこの「ポリモーフィズムに関連したキャスト」を行う機能しか持っていない。そのため、非クラス型や継承関係にないクラス同士や、非ポインタもしくは非参照型の場合、仮想関数を持たないクラスの場合には dynamic_cast は使用できない。
 
拡張 BNF / EBNF / ABNF
 ( Extended BNF / Augmented BNF )
 「言語規定言語」
 特定の言語仕様を記述するためのもの。
 実際には BNF を元に手を加えたもの。基本的な文法は BNF と同じだが、それを元に表現形式等が変えられている。「拡張のされかた」は場合場合によって異なるため、実際には「ローカルな仕様が増えた」ということになる。
 XML など多くの「言語規定言語(メタ言語)」が「拡張 BNF 」である。
 
EDI ( Electronic Date Interchange )
 「電子データ交換」
 企業間通信におけるプロトコル
 各企業がコンピューターを使用しネットワークを通じて受発注や決済等の情報をやりとりする場合、統一したプロトコルで通信を行う必要がある。そういったプロトコルを取り決め、企業間の情報交換を簡易にし、コストを減らそうとすることを「 EDI 」と言う。
 あくまで「企業がコスト削減のために行う」ことが重要。この用語には企業同士の通信に仕様が限られる。
 プロトコルは企業によって異なる。また、通信は直に行うものだけでなく、インターネットを介し HTML XML を用いる場合もある。
 
enum( enumeration )
 「列挙」
 C言語言語機能のひとつ。
  enum を使用することで「定数値を特定の単語に置き換える」ことができる。これは #define const int とほぼ同じ機能だが、これらと違い「メンバ変数のような形で定数値を作れる」というメリットがある。MFCを使用して作成されたダイアログクラスなどにこの例がある。
 さらに enum は、いくつかの整数値をまとめて「特定の」を割り当てることができる。この型で作られた変数には普通の整数値を格納することができない。この機能は「特定の整数値しか受け取りたくないフラグ」などで重宝する。
 これらとは別に、「何かを列挙する(ならべて差し出す)」という意味で使われる場合がある。たとえばAPI EnumWindows() ウィンドウを次々と取得することができる。
 
EUC
 ( Extended Unix Code )
 「 UNIX 文字コード」
 文字コードのひとつ。
 主に UNIX OS で使われる、日本語の文字列を表示するための文字コード。ウィンドウズは Shift JIS なので、場合によっては文字コードの変換が必要なこともある。
 
Exchange Server
  Microsoft 社製アプリケーションのひとつ。
 Windows NT で使用する。ネットワークを通した多人数での処理を潤滑に進めるためのアプリケーション。いわゆるグループウェア。情報の共有・排他・配信・管理を行う。
 
Exe ( Execution )<エグゼ>
 実行ファイル拡張子。もしくは「実行ファイル」そのものの意味。
 
explicit <エクスプリシット>
 「明示的」
 引数をひとつだけ受け取るコンストラクタに付けることのできる C++ 言語キーワード
 クラス関数の引数として使う場合、その関数には、クラスのコンストラクタの引数になっているものも渡すことができてしまう。これは暗黙的にコンストラクタが呼び出されるからである。このとき、「コンストラクタの引数」がまるで「関数の引数」であるかのように振る舞ってしまい、本来ならコンパイルエラーとなって欲しい場面でも、見えない部分でコンストラクタが呼ばれることでコンパイルが通ってしまう。その結果、想定していない動作をする可能性がある。
 そこで、コンストラクタには「暗示的に呼び出せない」ようにするためのキーワードがある。それが explicit である。このキーワードを付けたコンストラクタは、必ず明示的に呼び出される必要があり、前述のようなことをしようとするとコンパイル時にエラーが発生する。
 
extern
 「外部」<エクスターン>
 ヘッダーファイル内で関数グローバル変数に使用するリンケージ指定子
 この単語を使用したものは「ソースファイル内に実体が存在する」という意味になる。この場合、コンパイル時には「仮の存在」として扱い、リンク時に「中間ファイル」内の実体と結びつける。これにより、ひとつの存在を複数のソースファイルから共有利用する事ができる。
 通常の関数はすべて extern が付いていると見なされる。
 ひとつの変数を複数のソースファイルから共有する場合には、グローバルな変数として作成し、使用する側でその変数名を extern 指定する。通常は、「変数を置くソースファイル」内で普通にグローバル変数として作成し、そのヘッダーファイルで extern int g_i; のように指定し、変数を使いたいソースファイルがこのヘッダーファイルをインクルードすることで実現する。
 言ってみれば、ヘッダーファイルの extern 指定は、関数における宣言にあたるものと考えればいい。この指定がある変数は「どこかに実体がある」とリンカが判断する。
 実際には、グローバル変数は極力作成すべきでない。通常は関数内に static 変数として作成し、その参照を返すようにすることで実現する。
  extern には extern "C" という使い方もあるが、これはここまでの解説とは「まったく別物」と考えるべきである。これについては名前装飾を参考にすること。
 
extern "C"
 名前装飾において「その関数はC言語形式の装飾名にすること」と指定するためのキーワード
 基本的に extern とは別物と考えるべき。
 
far <ふぁー>
 「遠隔地の住所」
 ポインタサイズ指定
 これがついているポインタは、格納できるアドレスが32ビットサイズだということを表している。このうち、最初の16ビットをセグメント、後の16ビットをオフセットといい、このふたつを組み合わせてアドレスを表すことになる。
 ただし、これは古いウィンドウズや MS-DOS 時代の話であり、現在の32ビットウィンドウズでは使用されない。実際、API FAR というマクロを使用し、Win32プログラミング時には空白に置き換えている。
 ウィンドウズ3.1などの16ビット OS では、16ビットサイズのポインタである near ポインタを普通使用していた。が、マシンのメモリが増えるに従い16ビットでは限界が出てきた。
 アドレスはバイト単位で計測するため、16ビットポインタは65536バイト=64KBまでのアドレスしか表すことができず、そのためアプリケーションのサイズなども64KBの制約を受けることになる。この状態を「スモールモデル」という。
 そこで、アドレスを32ビットとして扱い、それ以上のサイズまで扱える用にした「ラージモデル」というものが生まれる。この状態になるようコンパイルされたものは far ポインタを使用して32ビットアドレスを扱う。ただしこのアドレスは「セグメントに16を掛けたものをオフセットに足した値」により求められるため、最大約1Mバイトまでしか表すことができない。
 Win32では完全な32ビットアドレス(4Mバイトまで表すことができる)しか使用しないので、現在これらは過去の遺物である。それでもいくつかのコードには残っており、また LPCTSTR などのプレフィックス LP long サイズ、つまり32ビットサイズのポインタであることを示しており、こういった部分には習慣のような形で残っている。
 
FIFO ( First In First Out )
 <フィフォ>
 「先入れ先出し」
 データ構造のひとつ。リスト構造などを利用してデータを並べて格納し、先に入れたデータを先に取り出す方式を採ること。キューとも言う。
 次から次へと増えていくデータを時系列順に並べて格納し、先に格納したデータから使用して破棄していく方法。「チケットを買うために並ぶ行列」を想像すると分かりやすい。先に並んだ人ほど、先にチケットを買え、先に列から離れる、こういった構造を指す。
 通常はリスト構造を使用して実現し、「リストの終端への追加」と「リストの先頭からの削除」を繰り返すことで実現する。
 STLコンテナには std::queue というクラスがあり、これを使用することで実現できる。
 
FILO ( First In Last Out )
 <フィロ>
 「先入れ後出し」
 データ構造のひとつ。リスト構造などを利用してデータを並べて格納し、先に入れたデータを最後に取り出す方式を採ること。
 実は「後入れ先出し構造」と同じ構造を意味する。
 
FORTRAN
 ( FORmula TRANslator )
 <フォートラン>
 「算術プログラミング言語」
 プログラミング言語のひとつ。科学用算術計算を得意とする。
 非常に古くから存在するプログラミング言語。数式をあまり変更せずにプログラムに使用することができ、また正確な算術計算を行うライブラリが揃っている。現在は、新たな開発に使用されることは少ない。
 ちなみに本辞書は Visual C++ 中心なので FORTRAN に特化した単語は掲載しない予定です。ごめんなさい。
 
 
FTP
 ( File Transfer Protocol )
  「ファイル送受信規約」
 <えふてぃーぴー>
 ネットワーク上でファイルを送受信するプロトコルの一種。ファイルの送受信のみと機能は少ないが、特化されたプロトコルのためシンプルで使いやすい。また、ファイルを「受け付ける」ことのできるプロトコルとしても広く使われている。
 
gcc ( GNU C Compiler )
  UNIX における標準コンパイラ
 たいがいの UNIX OSに備わっている、 C++ 言語プログラムのコンパイルリンクができるツール。 UNIX 系以外にも、ウィンドウズを含め様々な OS に対応した gcc がリリースされている。バージョンアップが頻繁に行われ、最新の正確な C++ 規格に準拠していることもあり、ウィンドウズ用アプリケーションの作成にもよく使われている。
  gcc の機能は、 Visual C++ のような開発環境に比べると非常に少ないため、 make などの他のツールと併用するのが望ましい。
 
 
GDI ( Graphics Device Interface )
  <じーでぃーあい>
 ウィンドウズが管理するウィンドウズオブジェクトの中でも、描画を行うものを指す。ビットマップパレット、ペン、ブラシ、フォント、パス、リージョンの7種類が存在する。
 ウィンドウズが管理するため、ウィンドウ等と同じくAPIを使用して作成・削除を行い、ハンドルを通して操作する。ウィンドウズ全体でグローバルリソースのため、不必要な GDI オブジェクトをデリートせずにおくとメモリを無駄に消費する。また、まだ使用する機会のあるGDIオブジェクトをデリートすると、その GDI オブジェクトが使用できなくなり描画に支障が起きる。
 GDI オブジェクトはそれ単体では使用できず、必ずデバイスコンテキストを介して使用する。デバイスコンテキストは1種類のGDIにつきひとつしか選択できないため、「 GDI オブジェクトを交換する」という方法を用いる。このとき、それまで使用していた GDI オブジェクトは他のデバイスコンテキストが使用しているかもしれないから、ハンドルを保存しておき、あとで再び元に戻しておく。
 
GLUT
 ( open GL Utility Tool-kit )
 「 OpenGL ユーティリティ」
 「 OpenGL を用いて作成した 3DCG 画像」を表示するウィンドウを作成・管理するためのライブラリ
  OpenGL そのものは、 3DCG 描画を行うための機能しかもたず、それをデバイスコンテキストに貼り付ける段階となると難しくなる。
  GLUT は、ウィンドウの作成を行い、そのウィンドウに OpenGL の描画結果を表示するためのライブラリが入っており、これを使用することで簡単に OpenGL をウィンドウズで使用することができる。
 
goto
 <ゴーツー>
 「行け!」
 関数内の特定の場所に移動する、 C 言語キーワードのひとつ。
 関数内で「特定の文」にコロン( : )を着けたものを「ラベル」といい、 goto は同じ関数内のラベルへと移動することができる。
  goto を大量に使用すると、プログラムの構造が分かりにくくなるため、使用は極力避けるべき。
 
GP-IB
 ( General Purpose Interface Bus )
 「多目的インターフェイス」
 <じーぴーあいびー>
 コンピューターと他のデバイスを継なぐために使用されるインターフェイスのひとつ。
 主に計測機器との接続に用いられる。標準装備されているものではないため、インターフェイスボードを別途用意する必要がある。
 
GUI ( Graphical User Interface )
 <じーゆーあい、グイー>「絵的操作環境」
 グラフィックをふんだんに使用した入出力環境
 具体的には、デスクトップアイコンが並び、アプリケーションはウィンドウとして表示され、ウィンドウ上に出力結果が表示され、マウスを使ってメニューやボタンを選択することで簡易な入力を行う、というものである。つまり現在の標準的な OS 環境である。
 対極にあるものとして CUI がある。
 
GUID( Globally Unique IDentifier )
  UUID のこと。
 COM用語としては、 UUID よりも GUID CLSID の方がよく使われる。
 
has-a 関係
 「AはBを持っている」
 オブジェクト指向プログラミングにおけるオブジェクト間の関係のひとつ
 「 has-a 関係」とは日本語に訳せば「AはBを持っている」と言える関係のことを指す。
 たとえば「 Crow has a wing. (カラスは羽を持っている)」や「 Window has a handle. (ウィンドウハンドルを持っている)」などがこの関係に当たる。
  C++ 言語 プログラミングにおいて、 has-a 関係は「持たれている方」へのポインタ参照を持ち「持っている方」から操作することで実現する。これは集約コンポジションなどとも呼ばれる(もしくは「これらによって実現される」とも表現される)。
 集約やコンポジションの性質から、「持っているもの」を取り替えたり、新たに加えたりすることができるため、 is-a 関係よりも自由度が高く、安易な継承よりもこちらを多用することが推奨されている。
 
HTML
 ( Hypertext Markup Language )
 「ホームページ記述言語」
 ホームページを記述するための言語
 ホームページとして表示するためには「タイトル」「リンク」「画像指定」等の指定が必要となる。その指定を行うための言語が「 HTML 」である。
 HTML には「タイトル」「リンク」「画像指定」等の指定を行うための「タグ」が定義されており、この定義を単なるテキストファイルに書き込むだけで、ホームページとして見ることができる HTML ファイルにすることができる。
 
ID
 ( IDentify )
 「識別子」
 存在を特定するための
 広い意味で使用される場合、一般には「特定の存在を識別するための値」を指す。たとえば変数のアドレスは、その変数を一意に示す ID として機能する。また UUID は特定の COM インターフェイスを識別するときに使用する。
 ウィンドウズでは、ダイアログボックスコントロールを識別するために使用される整数値を指すことが多い。リソースエディタでコントロールをダイアログに貼り付ける段階で、各コントロールに整数値を割り振る。この値は GetDlgItem() などで利用できる。 Visual C++ などの多くの開発環境では、プログラマーは ID (整数値)の代わりに "ID_EDIT_1" などの文字列を割り当てるだけで済むようなっている。これは、開発環境側が ID を適当に作り、その値を文字列に割り当ててくれているからである。この仕組みのおかげで、プログラマーは無機質な整数値ではなく分かりやすい文字列でダイアログボックスコントロールを識別することができる。
 
IDE
 ( Integrated Device Electronica )
 主にふたつの意味がある。
 「ハードディスクインターフェイス」:コンピューターとハードディスクを継なぐためのインターフェイス。プログラミングとはあまり関係ない。
 「統合開発環境」: Visual C++ などの、コンパイラリンカをまとめて操作するためのシステムを IDE (統合開発環境)と言う。プログラミングではこちらの意味の方が多いと思われる。
 
IDL( Interface Definition Language )
 「連結面定義言語」
  COM CORBA で使用される言語
  COM などの、複数の OS 間で関数を呼び合う場合には、その呼び出し方法が一意に定まらなければならない。 int のサイズ、ポインタや参照の性質など、これらはコンパイラや動作する OS によって変わってくる。この問題を解決するものが IDL である。
 関数の宣言部を IDL に翻訳することで、 OS やコンパイラに寄らない関数宣言を作成できる。翻訳したものは拡張子が *.idl に保存する。これを IDL コンパイラ(VCでは MIDL を使用する)を用いてC++言語形式に変換する。これをC++コンパイラに通すことで、外からも呼び出せる関数を作成できる。また、同時にタイプライブラリを出力し、これをヘッダーファイルの代わりとする。
 ちなみに COM CORBA では言語仕様がまったく違うので注意すること。
 
if
 「もしも」
  キーワードのひとつ。値を判定して「次の行を実行するかしないか」を決定する機能を持つ。
  if( A ) のように使用する。
 もし A が「0以外」であれば、 if は次の行を実行する。その1行がネストの場合には、ネスト全体が実行される。
 もし A が「」であれば、次の行は実行されない。
 この if の機能を使用することで、場合によって実行させる部分を変更することができる。このような「場合によって処理の流れを分岐させる」機能を「分岐」と言う。
 
IID( Interface IDentifier )
 COMインターフェイスを識別するための UUID
 COMインターフェイスは ActiveX に入れられインターネット上で公開される場合があるため、その存在を世界中で一意に識別できなければならない。そのために付けられる識別用文字列が IID である。
  IID_IShellLink なども IID のひとつ。これらは Shlguid.h でグローバル変数として作成されている。
 
IIS( Internet Information Server )
 「インターネットサーバー」
  Microsoft 社製のインターネット サーバー
 Windows NT ではこれをインターネットサーバーとして使用することが推奨されている。
 
IntelliSense
 <インテリセンス>
 「単語自動補完機能」
 Visual Studio のテキストエディタに備わっている単語を簡単に入力する機能
 この機能を使用することで、クラスメンバ関数を一覧から選んで選択したり、変数の名前を途中まで入力して残りの部分を自動的に補完したりすることができる。これによりプログラムの入力が簡易化される。
 
 
io ( in - out / i-o )
  「入出力」<アイオー>
 「入力」と「出力」のこと。C ランタイムライブラリ stdio.h 標準C++ライブラリ std::ios などの io もこの意味で、ともにファイルや文字列の入出力を行うクラス関数ライブラリとなっている。
 
IP ( Internet Protocol )
 インターネット用のプロトコル
  IP TCP UDP によって構成される。インターネット上で通信を行う場合、 TCP UDP のどちらかを直接使用するので、基本的に IP について考える必要はない。
 一般に、 IP と言ったら IP アドレスを指す場合が多い。
 
IP アドレス ( IP Address )
 「インターネット住所」
 IPに則った、インターネット上のコンピューターを一意に識別する整数値
 インターネット上では互いに通信を行うため、自分自身に番号を付ける。現在の規格では「1バイトサイズ符号なし整数値」を4つ組み合わせた値を使用する。よく見かける 123.45.67.89 のようなもののことである。いわゆる「ドメイン名」は、これを単語に置き換えたもの。
 ダイヤルアップを用いプロバイダ経由でインターネットと接続する場合、プロバイダがそのときどきで接続したコンピューターに IP アドレスを割り当てられる。逆に常時接続の場合には、初めから一意の IP アドレスを割り当てられ、それを使い続けることになる。
 現在の IP アドレスは4バイトサイズなので、最大4294967295個のコンピューターしかインターネットに接続できないことになるため、将来はサイズが拡張されることになる。
 
is-a 関係
 「AはBの一種である」
 オブジェクト指向プログラミングにおけるオブジェクト間の関係のひとつ
 「 is-a 関係」とは日本語に訳せば「AはBの一種である」と言える関係のことを指す。
 たとえば「 Crow is a bird. (カラスは鳥の一種である)」や「 Dialog is a window. (ダイアログウィンドウの一種である)」などがこの関係に当たる。
  public 継承は、必ずこのような関係のクラスで行わなければならないとされる。たとえば CDialog CWnd から継承している。これは先ほどの「 Dialog is a window. 」の考えに則った継承である。この規則に則った継承は「自然」な継承であり分かりやすく、バグが発生しにくい。
  これはつまり「単にプログラムを簡略化するためだけの安易な継承は行ってはならない」という意味である。例えば「名札クラス」として CNameplate を作る場合に、安易に CString から継承してはならない。なぜなら「 Nameplate is a stirng. 」ではないからである。こういった場合には has-a 関係の方が合っていると言える。
 しかし、必ずしもこの規則が当てはまるわけではないことにも注意。このあたりに、オブジェクト指向プログラミングのあいまいさが存在するとも言える。
 
ISO
 ( International Organization for Standardization )
 「国際標準化機構」
 <あーえすおー、イソ>
 世界標準を決める組織。主に科学技術分野の規格を規定する。
 実際にはこの組織よりも、この組織によって作られた標準規格の方が重要。標準規格は ISO99999 のような形式の名称となっている。
 特に、企業が採用する種類の ISO 規格は、その企業が「正しい行いをしている」ことを証明するもののため、多くの企業がこぞって取得している。
 
ISO9660
  ISO によって作られた規格のひとつ。 CD-ROM のファイルシステムを決定する規格で、この規格に準拠した CD-ROM は多くの OS で読むことができる。
 
ITEMIDLIST( Item ID List )
 <アイテムIDリスト>
 ファイルを識別するための構造体
 通常ポインタを介して使用し、シェルエクステンションAPIを使ってアクセスする。可変長の連結型構造体であり、 SHITEMID という構造体が連なってリスト構造になり ITEMIDLIST となっている。 SHITEMID フォルダのひとつひとつの階層の名前を持っている。
 通常のファイルパスと違い、デスクトップやマイコンピューターといった仮想フォルダにアクセスできる利点がある。
 
Java
 <ジャバ>
 プログラミング言語のひとつ。
 C++ 言語をより精錬させた言語機能を持つ。多くの OS に対応しているため、ネットワーク関係の処理などに使用される。
 ちなみに本辞書は Visual C++ 中心なので Java に特化した単語は掲載しない予定です。ごめんなさい。
 
JIS ( Japanese Industrial Standard )
 <ジス>
 「日本工業規格」
 日本製品における標準規格
 プログラミング用語としては、文字コードのひとつ、 JIS 文字コードを指すことが多い。
 
JPEG
 ( Joint Photographic Experts Group / jpg )
 画像圧縮方法のひとつ、もしくはこの方法によって圧縮が行われた画像ファイル。
 インターネットで広く使用されている画像圧縮方法のひとつ。フーリエ変換を用いて画像を周波数変換して圧縮する。
 圧縮率が非常に高いというメリットがあるが、反面、圧縮した後元に戻すことができないことや、固定ピクセル数ごとに変換を行うためにモザイク状になる場合があること、フーリエ変換の性質上、大きく色が変わるような絵を圧縮すると汚くなってしまうことなどの問題点がある。
 API の中にはこの JPEG に対応しているものもある。
 
LALR 構文解析
 ( Look Ahead LR Parsing )
 LR 構文解析の発展形。
 LR 構文解析を行っている時に、似た構文が複数回出てくる場合がある。このこういった「頻繁に出てくる構文」をまとめ、無駄を無くした構文解析方法を「 LALR 構文解析」と言う。
 
LIFO ( Last In First Out )
 <リフォ>
 「後入れ先出し」
 データ構造のひとつ。リスト構造などを利用してデータを並べて格納し、最後に入れたデータを先に取り出す方式を採ること。スタックとも言う。
 次から次へと増えていくデータを時系列順に並べて格納し、最後に格納したデータから破棄していく方法。「パフェ」を想像すると分かりやすい。パフェを作るときはまずコーンフレークから入れ最後に生クリームを乗せるが、食べるときはまず生クリームから食べ最後にコーンフレークを食べる。
 通常はリスト構造を使用して実現し、「リストの終端への追加」と「リストの終端からの削除」を繰り返すことで実現する。
 STLコンテナには std::stack というクラスがあり、これを使用することで実現できる。
 先入れ後出し構造も同じ意味。
 
LL 構文解析
 ( LL Parsing
  / Left-to-right Left most derivation Parsing )
 構文解析の方法のひとつ。単語を左から読み取り、先読みしつつ左から解析する方法。
 字句解析によって「トークンの集まり」となったものを構文解析する方法のひとつとして「 LL 構文解析」というものがある。
 全文の中の左にあるトークンから拾っていき、これまでに拾った単語を左から解析する。そしてこのとき「あいまいさ」を取り除くため「先読み」を行う。解析には、言語が持つ「解析表」を用いて置き換えを行い、すべての置き換えが完了した時点で解析終了となる。
 言語や文によっては、先読みするトークンの数が多い場合がある。そういった場合のため、 LL 構文解析を「 LL(n) 構文解析」と表記し、「 n 」に「先読みトークン数」の中で最大のものを書き込む。
 
LPARAM( LONG Parameter )
 <えるぱらむ>
 メッセージとともに送られてくるデータに使われる
 型としては32ビット整数値、 long と同じ。「 Parameter 」という単語は、メッセージを関数と見立てた場合の「引数」としての意味があるからであろう。
 この型のデータをメッセージとともに送る場合、API SendMessage() の第4引数に渡す。また、メッセージとともに送られてきたこの型の値を受け取る場合には、ウィンドウプロシージャの第4引数から受け取る。
 この値の実際の使用方法などは、もうひとつの値の WPARAM を見ること。
 
LR 構文解析
 ( LR Parsing
 / Left-to-right Right most derivation Parsing )
 構文解析の方法のひとつ。単語を左から読み取り、先読みしつつ右から解析する方法。
 字句解析によって「トークンの集まり」となったものを構文解析する方法のひとつとして「 LR 構文解析」というものがある。
 全文の中の左にあるトークンから拾っていき、これまでに拾った単語を逆に右から解析する。そしてこのとき「あいまいさ」を取り除くため「先読み」を行う。
 たとえばプログラムの字句解析結果が「z = x - y;」だった場合に LR 構文解析することを考える。左から順に3回トークンを取り込む(「シフト( shift )」する)と「 z 」「 z = 」「 z = x 」となる。
 この時点で「2項演算子 = 」が適用できることから「 ( z = x ) 」と囲えるが、「 = 」の結合規則を考えるとその次に読み込むトークンが問題になる可能性がある。このあいまいさを解決するため、 LR 構文解析の「先読み」を行う。次のトークンを先読みすると「 z = x - 」となり、「 - 」は「 = 」よりも優先順位が上のため引き続きトークンの読み込みを継続することになる。
 次のトークンを読み込むと「 z = x - y 」となる。解析は右から行うため、この時点で「 - 」が適用できるが、あいまいさを取り除くため再び先読みを行う。すると「 z = x - y; 」と結合規則と関係ない「 ; 」が現れたため、先読みした単語を消し(消せるから「先読み」である)「 - 」を適用して「 z = ( x - y ) 」とする。このように、先読みを行うことであいまいさをなくすことができる。
 「 ( ) 」で囲んだ部分はひとつのトークンとみなすか、もしくは何かの単語に置き換える(「還元する( reduce )」とも言う)。この時点で「 = 」が適用でき「 ( z = ( x - y ) ) 」となる。最後のトークンを読み込み「 ( z = ( x - y ) ); 」となりこれにより「 ( ( z = ( x - y ) ); ) 」となった時点で構文解析が終了する。
 言語や文によっては、先読みするトークンの数が多い場合がある。そういった場合のため、 LR 構文解析を「 LR(n) 構文解析」と表記し、「 n 」に「先読みトークン数」の中で最大のものを書き込む。上の例では「 LR( 1 ) 」となる。
 
LSB ( Least Significant Bit )
 「最下位ビット」
 一番右端ビット
 変数を「アドレスの少ない方が左に来るようビットを並べたもの」(つまりメモリ上でのイメージ)として考えた場合に、一番右側に位置するビットを「 LSB 」と言う。ビット上での操作を表現するときに便利な言葉。
 これらの左右逆なものを MSB という。
  LSB には Least Significant Byte の略の意味もあるので注意。
 
LSB ( Least Significant Byte )
 「最下位バイト」
 主にふたつの意味がある。
 基本的には、一番右端バイトのことを指す。
 変数を「アドレスの少ない方が左に来るようバイトを並べたもの」(つまりメモリ上でのイメージ)として考えた場合に、一番右側に位置するバイトを「 LSB 」と言う。バイト上での操作を表現するときに便利な言葉。
 ただ、これは「変数の中身が数字でないばあい」に当てはまる。
 「変数の中身が数字」の場合、 LSB は「数字の最下位桁が入っているバイト」を指す。これにより、ビッグエンディアンでは LSB が一番右側のバイトとなるが、リトルエンディアンでは逆に一番左側のバイトが LSB となる。これにより、リトルエンディアンは「 LSB First 」とも呼ばれる。
 これらの左右逆なものを MSB という。
 さらに、 LSB には Least Significant Bit の略の意味もあるので注意。
 
main()
 一般的な C++ 言語、およびコンソールプログラムにおける最初に呼ばれる関数
 プログラマーはこの main() という名前の関数をプログラムに作成する。するとこの関数は、アプリケーションが実行されたとき最初に呼ばれるよう設定される。このような関数をエントリーポイントと言う。
 戻り値は int 、引数は argcargv を持ち、これによって渡されたパラメーターを取得することができる。
  argv を Unicode 用にする場合の関数名は wmain() 。このふたつを自動的に切り替える場合には _tmain() を使用する。
 ウィンドウズアプリケーションの場合には WinMain() main() の代わりとして作る必要がある。
 
make
 「メーク」
  UNIX 系のコマンドのひとつ。
  UNIX において「統合開発環境を使用しない」でアプリケーションを作成する場合、 makefile を作成し、 make コマンドに渡すことで、複数のファイルを自動的にコンパイルリンクさせることができる。
  Visual C++ のような総合開発環境では違うシステムを用いているため、基本的に使用する必要はない。使用する場合には Visual C++ の場合 NMAKE というコマンドを代わりに使用する。
 
makefile
 <メークファイル>
  make コマンドに渡すスクリプトファイル
  UNIX において「統合開発環境を使用しない」でアプリケーションを作成する場合、この makefile を作成し、 make コマンドに渡すことで、複数のファイルを自動的にコンパイルリンクさせることができる。
  makefile には「どのファイルをコンパイルするか」「どういう設定を行うか」といったことを書き込む。 make はこれを読み込んで自動的に処理する。 makefile は一種のプログラムとも言える。
  Visual C++ のような総合開発環境では、代わりに「プロジェクトファイル」を用いているため、基本的に makefile を作成する必要はない。細かいコンパイル設定を行ないたい時など作成する必要がある場合には、 Visual C++ の場合メニューの「メイク ファイルのエクスポート」を行い、エクスポートされたファイルを NMAKE に渡すことになる。
 
MBCS
 ( Multi-Byte Character Sets )
 <マルチバイトキャラクターセット>
 日本語を使用するときの文字列の処理方法のひとつ。
  char ひとつでは日本語の文字を表すには足りないので、隣接する2つ以上の char を使って日本語を表す方法。
 日本語は2バイトあればだいたいの文字を表せるので、 MBCS のひとつ DBCS を使用する。
  MBCS に対応した関数を使用するときには _MBCS #define する。といってもこれがデフォルトなので、通常は MBCS を使用することになる。
  _MBCS モードでは _T の付いた _t の付いた関数、そして API MBCS 用のものへと変換される。たとえば TCHAR char に、 _tcscmp() _mbscmp() へと、そして GetWindowText() GetWindowTextA() に変わる。これらは MBCS の文字列を適切に処理する。
 
MCI
 ( Media Control Interface )
 「マルチメディア API 」
 ウィンドウズでマルチメディア機能を使用するための API およびコマンド群。
 ウィンドウズのマルチメディア機能を使用して動画処理等をする場合、 MCI という API を使用することでも実現できる。 mci プレフィックスに持つ API がこれに当たり、これらに MCI_ をプレフィックスに持つコマンドを渡すことでマルチメディア機能を操作することができる。
 ただし、さらに高度な機能を必要とする場合には DirectX の使用を勧める。また、簡単に「 WAV ファイルを再生したい」場合には sndPlaySound() が用意されていたりと、 API の中にももう少し簡単にマルチメディア機能を操作できる API があるためそれらを使用することもできる。
 
MDI ( Multiple Document Interface )
 「多ファイル1ウィンドウ1プロセス」
 ひとつのプロセス、ひとつのメインウィンドウ複数ファイルを開ける方式アプリケーション
 「 Microsoft Word 」などがこれに当たる。 Visual C++ は「普通のファイル」単位ではこれに当たる。
 複数のファイルを同時に編集したり、編集した結果をひとつのウィンドウで表示したい場合などにこの方式が向いている。
 ひとつのファイルしか開けない方式を SDI という。
 
MFC( Microsoft Foundation Class library )
  Visual C++ 付属のライブラリ
 APIラッパークラスで構成されており、「APIを使いやすくするライブラリ」として提供されている。実際、APIのみの開発に比べて手間は比較的軽減される。
 Visual C++ に添付されていること、他の開発環境にも添付されていること、ライバルとなるライブラリがほとんど存在しなかったことにより、ウィンドウズアプリケーションの開発においてグローバルスタンダードとなる。
 グローバル変数やTLSを使用したシステムを内部に持つため、構造が複雑で分かりにくく、バージョンアップの度にバグが生まれるという状況にある。そのほか、マルチスレッドに弱い、内部的に処理する部分が多すぎる、コードに古くさい部分が多々あるなど問題点は多く存在している。
 しかし、ある程度の規模のプログラムとなるとなんらかのライブラリの使用は必要不可欠であり、この場合にMFCの代替案が存在しないため結局MFCが使われ続けることになる。
 
MFC42.dll
 <えむえふしーよんにーでぃーえるえる>
  MFC を用いた実行ファイルもしくは DLL を作成する場合に、【プロジェクトの設定】ダイアログの【一般】ページの【Microsoft Foundation Class】に【共有 DLL で MFC を使用】を選んだ場合に必要となる DLL
 この設定が【 MFC のスタティック ライブラリを使用】となっている実行ファイルもしくは DLL は、 MFC がスタティックリンクされる。つまり、必要とする MFC の機能はすべて組み込まれ、単体で実行することができるようになる。
 対して【共有 DLL で MFC を使用】の場合、 MFC の機能は組み込まれず、 DLL として提供される。その MFC の機能が入った DLL が mfc42.dll である。
  MFC42.dll は Visual C++ に添付されており、再配布が許されているため、自分が作成したアプリケーションと共に配布することができる。ただし、 MFC42.dll はファイルサイズが非常に大きいという問題がある。
 現在は多くのアプリケーションがこの DLL を使用しているため、 Windows/System フォルダにある場合が多い。その場合には再配布せずにすむ。【 MFC のスタティック ライブラリを使用】で MFC をスタティックリンクする場合、実行ファイルや DLL のサイズが大きくなるため、【共有 DLL で MFC を使用】で作成し、単体で配布することが多い。ただし、 MFC42.dll のバージョンアップ等で仕様が変更され、これまで使用できたアプリケーションが動かなくなる可能性がある点に注意。
 
MFS
 ( Memorymaped File System )
  <メモリマップドファイルシステム>
 メモリ上の領域をファイルと同様に使用する方法。
 通常、 OS がシステムとして持っている。ディスク上のデータとのアクセスよりも速いため、頻繁にアクセスが行われるファイルに対して有効だが、メモリが少ない場合にはスワップファイル化してしまうため、パフォーマンスは上がらないと言われる。
 ウィンドウズは「特定のフォルダ」に対してのこの機能は持っていないが、最適化のため一部のファイルに対しては行われているようである。また、アプリケーションが特定のファイルに対して同様の機能を行うファイルマッピングというものはAPIとしてサポートされている。
 
MIDL( Microsoft Interface Definition Language )
 Visual C++ 付属の IDL コンパイラ
 
MIMD
 ( Multiple Instruction Multiple Data
 / Multiple Instruction Stream Multiple Data Stream )
 「複数命令複数データ」
 複数の CPU を同時に使用し、それぞれの CPU に別々の命令を処理させること。
 いわゆる普通の「マルチプロセッサ」による処理を指す。この単語は、「1命令複数データ」で複数の CPU を使用する SIMD と対比する場合に使用されることが多い。 SIMD はひとつの命令を複数の CPU で実行することで「ある特定の処理の処理速度を向上させる」ことが目的だが、 MIMD は複数の CPU で別々の命令を処理するためコンピューター全体での処理速度を向上させることができるようになる。
 
Microsoft
 <マイクロソフト>
 ソフトウェアを開発し販売する企業の最大手。
  Windows NTVisual StudioVisual C++Visual Basic 等を開発し販売している。
 
Microsoft.NET
 <マイクロソフトドットネット>
  Microsoft による構想のひとつ。
 ネットワークアプリケーションをターゲットとし、ネットワーク向けアプリケーションおよびコンポーネントが、相互に通信できるようにするための環境を整えることを目的とする。
 相互通信には XML を使用し、プログラミング言語に依存しないライブラリである CLR を提供し、どの OS でも実行できる MSIL を用意し、この形式で出力できるプログラミング言語 C# とその開発環境を提供する。
 
MPP
 ( Massively Parallel Processing )
 「超並列処理」
  CPU を複数個用意し同時に処理させること。これにより処理速度の向上が図られる。
 また、この処理を行うためのコンピューターも MPP と呼ぶが、こちらは Massively Parallel Processor の略である。
 
MS-DOS
 ( Microsoft Disk Operating System )
 <エムエスドス>
 ウィンドウズ以前に主流だった、 Microsoft 社製 OS
 CUI ベースだがその分フロッピーディスクに収まるほど軽く、またアプリケーションがハードウェアに直接アクセスすることができるためマシンパワーを十分に引き出すことができる。
 Windows 9x 系は MS-DOS の後継 OS であるため、ある程度 MS-DOS についての知識が必要な場合が多い。
 
MTS ( Microsoft Transaction Server )
  Microsoft 製のトランザクション サーバー。同社製品の IIS に搭載されている。
 
MSB ( Most Significant Bit )
 「最上位ビット」
 一番左端ビット
 変数を「アドレスの少ない方が左に来るようビットを並べたもの」(つまりメモリ上でのイメージ)として考えた場合に、一番左側に位置するビットを「 MSB 」と言う。ビット上での操作を表現するときに便利な言葉。
 これらの左右逆なものを LSB という。
  MSB には Most Significant Byte の略の意味もあるので注意。
 
MSB ( Most Significant Byte )
 「最上位バイト」
 主にふたつの意味がある。
 基本的には、一番左端バイトのことを指す。
 変数を「アドレスの少ない方が左に来るようバイトを並べたもの」(つまりメモリ上でのイメージ)として考えた場合に、一番左側に位置するバイトを「 MSB 」と言う。バイト上での操作を表現するときに便利な言葉。
 ただ、これは「変数の中身が数字でないばあい」に当てはまる。
 「変数の中身が数字」の場合、 MSB は「数字の最上位桁が入っているバイト」を指す。これにより、ビッグエンディアンでは MSB が一番左側のバイトとなるが、リトルエンディアンでは逆に一番右側のバイトが MSB となる。これにより、ビッグエンディアンは「 MSB First 」とも呼ばれる。
 これらの左右逆なものを LSB という。
 さらに、 MSB には Most Significant Bit の略の意味もあるので注意。
 
MSComm
 ( Microsoft Communications Control )
 「通信コントロール」
  OCX のひとつ。シリアルインターフェイス( COM ポート、 RS-232C とも言う)を介して通信を行うためのもの。
  Visual C++ でも使用できるが、基本的には Visual Basic のためのもの。 Visual C++ では API CreateFile() などのファイル入出力で、ファイルと同じように通信を行うことができる。
 
MSDB
  Microsoft SQL Server に含まれているデータベースのひとつ。タスクを管理するためのデータベース。
 
MSIL
 ( Microsoft Intermediate Language )
 「マイクロソフト中間言語」
  Microsoft が提供する、 OS に依存しない実行ファイル言語
 実行ファイルは、通常機械語という「言語」で書かれている。この機械語は OS によって規定されている言語であるため、異なる OS では実行ファイルの互換性がない。
 そこで、 OS ではなく別のものが仲介して言語を読み解く方法が存在する。その方法のひとつが「 MSIL 」という言語を使用したものである。
 まず、プログラムを機械語ではなく MSIL にコンパイルする。実行時には MSIL を読むことができる別のコンパイラに解読してもらい、それを機械語に翻訳してもらう。最終的にこの機械語としてのプログラムが実行されることで、プログラムが実行される。
 この形式であれば、 MSIL を機械語に翻訳するコンパイラさえ各 OS ごとに制作すれば、どの OS でも実行することができるようになる。
 
near<ニア>
 「近くの住所」
 ポインタサイズ指定
 これがついているポインタは、アドレスが16ビット整数値だということを表している。
 Win32では通常アドレスは32ビットのため、 near のポインタではアドレスが格納できないことになる。そのためWin32プログラミングでは使用しない。実際、API NEAR というマクロを代わりに使用し、Win32プログラミング時には空白に置き換えている。
 Win16では32ビットポインタに far を使用していたが、現在は32ビットポインタしか使用しないためこれも使用されていない。
 
NIL
 「ゼロ」
 <ニル>
 意味としての「ゼロ」。
 通常、 0 と書くと「整数値のゼロ」意味するため、何らかの概念的なものとしてのゼロ、存在しないもの、終端等を表したいときに「 NIL 」を使用する。たとえばリスト構造を言語に依存しない形で表現する場合に、終端の要素は「隣の要素を指すポインタ」に NIL を入れる、という形で使用する。
 また他言語(たとえば Delphi )では、ゼロを表すアドレスC 言語NULL に当たるもの)を「 NIL 」と表すことがある。
 
NMAKE
 「 Visual C++ make」
 Visual C++ における make コマンド。
 ビルドを実行したとき、 Visual C++ は NMAKE を実行する。 NMAKE はプロジェクトを読み込みこの中の情報を元にコンパイルおよびリンクを行う。
 
NULL
 「ゼロ」
 <ヌル / ナル>
 アドレス値としての 0
 基本的には、単なるゼロの別名。主にポインタのアドレス値として使うことを目的とする。と言っても実際に使用することはできない。「無効なポインタ」としての意味を持ち、ポインタが返る関数で「関数が失敗した」という意味で NULL が返されることが多い。また、ポインタの初期値として NULL を格納し、ポインタの中身が有効か無効かのチェックにも使用される。
 NULL はあくまで「整数値の 0 」だということに注意。整数値のゼロだけは特別にポインタ型への暗黙的な変換が可能なため、 NULL として使用できる。だが、整数値としても使用できるため、オーバーロードなどで問題が起きやすい。そのため、 NULL ではなく 0 を使うプログラマーもいる。
 
NULL ターミネート ( NULL Terminate )
 「終端文字で閉じる」
 終端文字文字列の最後に置くこと。リテラル文字列では自動的に行われる。
 
OCR
 ( Optical Character Recognition )
 「光学的文字認識」
 紙媒体に書かれた文字を、コンピューター上の文字列に置き換える技術。
 スキャナ等で読み取った画像を分析し、文字に置き換え、テキストファイルに変換するようなアプリケーションを OCR という。郵便局で、郵便番号の識別などに使われている。
 
OCX ( OLE Custom Controls )
 「カスタムダイアログボックスコントロール」
  ActiveX 古い形式、もしくは古い名称。
 昔(1996年くらいに)は ActiveX OCX と呼ばれ、機能も「新しく作られたダイアログボックスコントロール」としての面が強かった。現在はその多くが ActiveX に置き換えられている。
 
ODBC ( Open Database Connectivity )
 「一般データベース操作法」
 データベースを操作するための方法のひとつ。
  ODBC はウィンドウズがサポートしているため、プレフィックス SQL API で操作することができる。また、 MFC には CDatabase などのクラスが用意されているためこれらを使用することもできる。
 
ODL
 ( Object Description Language )
 「オブジェクト記述言語」
  COM で使用される言語
  COM などの、複数の OS 間で関数を呼び合う場合には、その呼び出し方法が一意に定まらなければならない。この問題を解決するもののひとつが ODL である。
  ODL は Microsoft 仕様(つまりMIDLに渡せる言語形式)の IDL に完全に含まれているため、 IDL の使用を勧める。
 
OEM
 ( Original Equipment Manufacturer )
 「相手先商標製造会社」
 一般には「製造技術だけを貸し、貸した先の会社で商品を製造し、貸した先のブランド名で商品を販売してもらう」会社を指す。
 つまり、 OEM となる会社は、製造技術を開発し、その技術のみを貸す。借りた会社はその技術を使用して製品を製造し、自社ブランド名で販売する。あたかもその会社で開発された製品であるかのように思えるが、実際には OEM によって開発された製品ということになる。
 特にハードウェアにおいてこの場合が多く、たとえば CD-R ドライブにおいて、製造・販売している会社ではなく「ドライブ部は○○製」というのが問題となるのはこのためである。
 ウィンドウズの場合、特にPCにプレインストールするウィンドウズを製作した会社を指すことが多い。
 プレインストール版の場合、インストールするPCに合わせてウィンドウズがカスタマイズされている。特に国による言語の違いなどをカバーする部分が変更されている。この変更を行った会社が OEM となる。
  OEM 版のウィンドウズは通常のウィンドウズと異なり、そのためそれぞれのウィンドウズは微妙に挙動が異なる場合がある。特に他言語のウィンドウズで実行するプログラムを作成する場合には、この部分について注意する必要がある。
 
OLAP ( Online Analytical Processing )
 「オンライン分析処理」
 データベース用語のひとつ。蓄えたデータを元に分析を行い、そのデータが実際にどういう意味を持つのかを表すためのアプリケーション。
 たとえば、企業での製品売上等をデータベースに蓄えたのち、それを OLAP に掛けることで、売上動向などを具体的に得ることができる。これにより、人間が直感的に行っていたことを部分的にコンピューターで行うことができる。
 
 
OLE( Object Linking and Embedding )
  <おーえるいー / オーレ>
 あるドキュメントにいくつものアプリケーションのドキュメントを含ませる技術。この機能を用いることで、ワードプロセッサーにドローグラフィックを載せるといったことが可能になる。「囲む」側をコンテナ、「囲まれる」側をサーバーと呼ぶ。
 実際にはウィンドウズ全体のオブジェクト化に深く関わっているが、そういった部分はCOMと呼ばれている。
 
On なんとか
 「……のとき」
  MFCメッセージハンドラに通常付けられるプレフィックス
 送られてきたメッセージプレフィックス WM_ を取り除き、そこに On を付ける場合が多い。たとえば WM_ACTIVATE CWnd::OnActivate() のように。
 だが必ずしもこの法則に則っているわけではなく、しばしば意味的なハンドラ関数名が付けられる。たとえば OnDraw() は特定のメッセージとは関連づけられていないが、「再描画」時に呼び出されることになっている。
 
 
OpenGL
 ( Open Graphic Library )
  <オープンジーエル>
 シリコングラフィックス社が開発した、 3D グラフィックを操作するためのライブラリ。 UNIX ワークステーション等で昔から使用されており、幅広い支持を集めている。
 ウィンドウズでは Direct3D が主力だが、ウィンドウズそのものが DirectX ナシでは描画能力がとても低いこと、ユーザー数によるゲーム販売量などによって支持を得ている状態。常に変わり続けている内容、 COM インターフェイスを使用したシステムなど、幾分OpenGLに比べて信用性は劣ると言える。
 だが、互いの長所と短所を確認して、住み分けると同時に、歩み寄っていく予兆はある。
 
operator
 「演算子」
 C++ 言語キーワードのひとつ。演算子のオーバーロードを行うためのもの。構文がややこしいので注意。
 
OS
 ( Operating System )
 <おーえす / オペレーティングシステム>
 「コンピューター管理ソフト」
 コンピューターを仕切るソフト。
 ユーザーからの入力を受け、CPU や各種デバイスを操作し、アプリケーションを管理するソフト。
 カーネルを持ち、 CPU へとアクセスする権限を持つ。またメモリを各アプリケーションに配分し、プリエンプション機能で各アプリケーションの持ち時間を配分するなど、アプリケーションの管理も行う。
 主な OS には、ウィンドウズ、 MAC OS 、 UNIX 系( Solaris 、 BSD 、 Linux )等がある。ただし、これらはデスクトップ向けであり、最近増えつつある PDA にはそれぞれ別の OS が乗っている。
 OS が異なればその機能も異なる。また、 OS を操作するためのライブラリも異なることが多い。ただしライブラリに関しては、多くの OS で使用できるものもある。
 
PASCAL
 ウィンドウズ API 関数宣言に付いている単語。プログラミング言語の「パスカル」とはあまり関係ない。
 これは呼び出し規約を統一するためのもので、 __stdcall #define で置き換えたもの。 WINAPI と同じ。
 
Perl <パール>
 プログラミング言語のひとつ。
 文法的にはC言語に近いが、型を持たず、文法の自由度が非常に高く、正規構文を使用した文字列処理能力が特に秀でている。またコンパイルを必要としないスクリプト言語でもある。
 現在 CGI の作成に非常によく使われている。
 ちなみに本辞書は Visual C++ 中心なので Perl に特化した単語は掲載しない予定です。ごめんなさい。
 
ping <ピーイング、ピング、ピン>
 「横顔」
 ネットワーク上にあるコンピューターに接続できるか試すためのツール
 継ながっているか調べるコンピューターのIP アドレスを指定して ping を実行すると、そのコンピューターに対して送信し、反応が返ってくれば「そのコンピューターと継ながっている」ことが分かる。
 ウィンドウズでは、 Windows フォルダにある Ping.exe がそう。
 
POSIX ( Portable Operating System Interface for UNIX )
 「 UNIX 規格」
  UNIX の統一規格。
  UNIX OS には非常に多くの種類があり、それぞれが拡張機能を持っている。その拡張部分を取り除いた、どの UNIX 系 OS にも存在する部分が「 POSIX 」である。
  Windows NT には「 POSIX Subsystem 」と呼ばれるものがあり、これを使用することで POSIX 準拠の UNIX アプリケーションを使用することができる。
 
RAID
 ( Redundant Arrays of Inexpensive Disk )
 「安くて冗長性を持った複数のハードディスク」
 <レイド>
 デバイスのひとつ。複数のハードディスクを同時に使用することで、保存できるデータ容量を増やしたり、安全性を高めること。
  RAID 装置には複数のハードディスクが内蔵されており、データそのものや、誤りをチェックするためのデータを各ディスクに分散して書き込む。こういった冗長性を持たせることで、あるハードディスクのデータが破損しても、他のハードディスクのデータを元に修復することができるようになっている。
 主に、誤りがあってはいけないコンピューターで使用する。
 
RAS( Remote Access Service )
 ネットワーク上の他のコンピューターにアクセスする方法。通常APIプレフィックス RAS が付いている。クライアントとして機能はどのウィンドウズでも行えるが、サーバーとしての機能はウィンドウズNT4.0以降でのみ使用できる。
 
RGB
 ( Red Green Blue )
 「光の三原色」
 光の三原色、もしくはそれによって現されるある一色、もしくは発色システムの種類のひとつ。
 光の色は、「赤の光」「緑の光」「青の光」を混ぜ合わせることで、任意の色を作成することができる。全てを混ぜ合わせれば白が生まれ、光が全くなければ黒が生まれ、また、各色の比率によって任意の色が生まれる。この仕組みを「光の三原色」という。
 画面でのある1点の色は、光の三原色の各色の強さによって決定される。各色は通常、整数値で現され、その値の範囲によって表現できる色の範囲が決定される。たとえば True Color の場合、1原色につき8ビット、つまり256階調で現し、3原色合わせて24ビット、つまり16777216色を表現できる。 True Color ( 24-bit ) は画面上の1点でこれだけの色を表現できる。ちなみに True Color ( 32-bit ) は具体的な色数の違いはなく、単に処理しやすい32ビットに合わせただけであったり、その他のデータを残りの8ビットに含めていただけであったりする。
 人間の目では、24ビット以上に色数を増やしても見分けることはほとんどできない。そのため、これ以上の色数はまず使用されない。ただし、画像処理を行う場合、処理後には細かい色を必要とする場合があるため、より多い色数を使用する場合もある。画像処理アプリケーションによっては、1原色につき16ビットを使用するものもある。
  API で色を指定する場合、 COLORREF という32ビットサイズの型を使用する API が多い。 API には RGB というマクロが存在し、このマクロの各引数で各原色の階調を8ビットの範囲で指定することで、 COLORREF 型として使用できる True Color ( 24-bit ) の色を作ることができる。
 以上は「画面に表示する場合」の話である。プリンターを使用して印刷する場合にはまったく異なる発色システムを使用するため注意すること。
 
Run
 「実行」
 何かを「実行する」「スタートさせる」という意味。感覚としては「走らせる」があっているだろうか。
  BASIC などの他言語では「プログラムを実行する」という意味だからか、ライブラリでは「プロセススレッドを新規に作成し開始する」という機能を持つ関数 Run という名前が使われることが多い。たとえば CWinApp::Run() など。
 
SDI ( Single-Document Interface )
 「1ファイル1ウィンドウ1プロセス」
 ひとつのファイルを開くごとにひとつのプロセスを作成しひとつのウィンドウを表示する方式アプリケーション
 「メモ帳」などがこれに当たる。 Visual C++ は「ワークスペース」単位ではこれに当たる。
 ファイルとウィンドウが1対1の関係のようなアプリケーションに向いている。
 複数のファイルを開ける方式を MDI という。
 
SDK
 ( Software Development Kit )
 「ソフト作成キット」
 特定のアプリケーションやソフトウェアを作成するためのライブラリ
 一般には「広義の API 」と同意。 API は「関数やクラス群」を指すことを示すことが多いのに対し、 SDK は「インクルードファイルライブラリファイル群」を指すことの方が多い。
 
signed <サインド>
 「符号あり」
 マイナスにもなる整数値
  int char などの「組み込み整数値型」の前に signed を付けることで、変数内のビットひとつを「プラスかマイナスか」のフラグとして使用し、マイナスの数も表現できるようになる。
  Visual C++ ではデフォルトでこの状態となるためわざわざ付ける必要はない。「符号なし」にする場合には unsigned を付ける。
 
SIMD
 ( Single Instruction Multiple Data )
 「1命令複数データ」
  CPU の命令実行方法のひとつ。ひとつの命令で複数のデータを処理する方法。
 画像処理などを行う場合、同じ整数値演算を複数回繰り返す必要が出てくる。この場合、いちいち命令を読み直さず、ひとつの命令を元に複数のデータを立て続けに処理することができる。この機能を「 SIMD 」と言う。
 これにより「命令の読み直し」が回避できるため処理の高速化を実現できる。ただし、簡略化できるのはこの「命令の読み直し」のみであるため様々な種類の命令がバラバラに送られてくる場合にはあまり効果がない。 SIMD が効果的なのは、画像処理などひとつの命令で大量のデータを処理するような場合に限られる。
 
SMP
 ( Symmetric MultiProcessor )
 「対称型マルチプロセッサー」
 マルチプロセッサーを実現するための方法のひとつ。複数の CPU に対しひとつの OS がアクセスし、あたかも CPU がひとつしかないかのように振る舞うこと。プログラムは、 CPU の数を気にしなくていいため、特別な処理をせずに高速化できる。
 
SQL ( Structured Query Language )
 「データベース操作言語」
 リレーショナルデータベースを操作するためのコマンド群
 リレーショナルデータベースを操作する時には、テキストベースのコマンドを送受信する事で操作を行う。このコマンド群を「 SQL 」という。
  SQL を使うことで様々な種類のコンピューターからリレーショナルデータベースを操作することができる。そういった点を考えると、 FTP プロトコルのようなものと考えればいいだろう。
 
SSI ( Server Side Include )
 「サーバー情報表示」
 ホームページにサーバーの情報を表示するためのシステム。
 ホームページ内に「コメントアウト」に似た特別な書式を使用することで、サーバーの時刻を表示したりすることができる。このシステムを「 SSI 」という。
 ホームページに書き込むだけという手軽さの反面、それほど複雑なことはできないため、通常は CGI と組み合わせて使用する。
 
static
 「静的」<スタティック>
 関数や変数に使用するリンケージ指定子。
  static は付けられる対象によってその性質が大きく変わる。
 ローカル変数に付けられた場合、その変数は「何度関数が呼ばれても同じ変数」となる。普通のローカル変数は、関数が呼ばれるたびにスタック上に作成されるが、 static 変数は一度作成されたらなくなることなく使われ続けられる。
 グローバル変数に付けられた場合、その変数は「スコープは、関数が置かれたソースファイル内のみ」という意味となる。
 関数に付けられた場合も同様、「そのソースファイル内からのみ呼び出せる」という意味となる。
 メンバ関数に付けられた場合、そのメンバ関数は「普通の関数」と同様に扱われる。メンバ変数にアクセスできなくなり、仮想関数とすることもできなくなる。
 つまり、実際に「リンケージ指定子」として機能するのは「グローバル変数・関数のみ」ということになる。
 
 
STL
 ( Standard Template Library )
 「標準テンプレートライブラリ」<えすてぃーえる>
 標準 C++ ライブラリの一部として含まれているテンプレートライブラリ
 イテレーターとしての基準を満たしているすべてのクラスを受け入れられる「アルゴリズム関数群」を持ち、イテレーターをサポートするための様々なコレクションクラスを持つ。
 
switch
 「複数分岐」
 C 言語キーワードのひとつ。分岐を行う場合に使用する。
  if などと同じように分岐を行うためのキーワード。自由度は低く、「あるひとつの整数値型変数が、どの定数リテラルと一致しているか」で分岐される。つまり定数型以外では swich に使用することはできず、また比較対照に変数を使用することもできない。反面、複数の条件を簡単に記述することができる。
 自由度が低いこと、記述方法が他のキーワードと違うことなどからあまり使用されないが、ウィンドウプロシージャ内のメッセージの振り分けにはよく使用される。
 
TAPI
 ( Telephony Application Programming Interface )
 「電話 API 」
  API のグループのひとつ。電話を使用するための関数群。
 電話を直接操作し、ダイヤルを行ったりコマンドを送信したりするための API プレフィックス line phone tapi 、の関数がこれに当たる。
 インターネットに関連した通信を行う場合には Winsock を使用することの方が多い。
 
TCHAR
 文字を表すのひとつ。
 実際にはこれは場合によって型が異なり、 Unicode を使う場合には wchar_t 、それ以外の場合には chartypedef される。
 文字列操作に使われる型、 LPCTSTR と LPTSTR の最初の T は、この TCHAR の T であり、実際これらは TCHAR へのポインタとして定義されている。
 これ以外にも、このマクロを使用したものが多数存在する。マクロによる置き換えは分かりづらい部分も多いため、理想的には標準 C++ ライブラリのように char_traits とテンプレートを使用するべきである(その方が分かりづらいかもしれないが……)。
 
TCP( Transmission Control Protocol )
 通信プロトコルのひとつ。
 データをまとめて送る方法。ただし実際には細切れにされ渡される。この部分の整合性やエラー処理は自動的に行われる。インターネットでは一般的な方法。
 もうひとつの送信方法をUDPという。
 
this
 「これ」
 自分自身を指し示すポインタを意味する単語。
 メンバ関数は通常、いずれかのクラスの変数を介して呼び出される。その変数を指し示すのが this である。メンバ関数の中から使用することで、「自分自身」へと明示的にアクセスすることができる。
 自クラスのメンバ関数やメンバ変数どうしは、暗示的に、つまり this ポインタを使用せずに相互にアクセスすることができるため、 this ポインタを使用する機会はあまりない。
  this ポインタを必要とするのは、たとえば「自分自身の参照を返すとき」や「自分自身を削除する」場合などである。
 
TPM
 ( Total Productive Maintenance )
 「全体的生産保全」
 生産管理のひとつ。全員が保全に気を配り効率化を図る方法。
 これまでの企業の体質として「効率を気にしなくていい人」「効率化を命令する人」という二項対立となっていた。そうではなく、従業員ひとりひとりが設備の保全や生産の効率化に気を配り、全員が効率化に努めるためのシステムを TPM という。
 企業が ISO 各標準の認証を取得するために活用できるということで注目されている。
 
TP モニター ( Transaction Processing Monitor )
 トランザクション処理を行うシステムのこと。
 
TRACE <トレース>
 「デバッグ出力」
 MFCマクロのひとつ。アウトプットウィンドウに文字列を出力するためのもの。
 デバッグ時にアウトプットウィンドウに出力するためのマクロ。 printf() と同じ形式で出力でき、非デバッグ時には自動的に削除されるといった利点がある。
 ただし、一度に出力できる文字数に制限がある、 MFC 利用時でないと使えないなどの欠点もある。
 MFC 以外で使いたい場合、 TRACE は API OutputDebugString() に書式化機能をつけたものであるため、こちらを直接使うことで実現できる。
 
try
 「例外検知係」
 例外処理を行う場合に、例外が発生したかどうかチェックするためのキーワード
 try 直後のネストおよびネストの中から呼ばれた関数で発生した例外は、この try によって検知することができる。といっても、実際に受け止めるのは catch のため、 try 自体にはそれほど意味はない。 try は catch の「機能する範囲」を指定するためのものと言える。
 
typedef <タイプデフ>
 「型定義」
 C++言語キーワードのひとつ。
 すでに存在する型、およびそのポインタ型、参照型の別名を付けるときに使用する。
 たとえば WPARAM UINT と同じなのは、 typedef を用いて UINT の別名として WPARAM が定義されているからである。
  typedef は型だけに機能し、また本当の型として使用できるため、 #define を使った置き換えよりも安全に使用できる。
 また、テンプレートを使いやすくする場合にもよく使用される。
 
UDP( User Datagram Protocol )
 通信プロトコルのひとつ。
 データを細かく分けそれを送信する。データの分割・復元やエラー処理などを自前で処理しなければならないが、その分無駄なく送信できる。速さが求められる画像や音声などの送受信や、エラーの少ないLANなどで使用される。
 もうひとつの送信方法をTCPという。
 
 
UML( Unified Modeling Language )
  「統合図化言語」<ゆーえむえる>
 クラスの相互関係を図として表す場合の書法
 オブジェクト指向プログラミングの場合、「それぞれのクラスがどのように関係しているか」が重要になるため、この部分だけを抜き出して検討・精錬していく必要がある。そのための、コードとは別の方法としての表現として使われるのが、 UML ということになる。
 
Unicode <ユニコード>
 日本語を使用するときの文字列の処理方法のひとつ。もしくはそのとき使用する文字コード
  char ひとつでは日本語の文字を表すには足りないので、2バイト wchar_t を用いた配列を使用する。このとき、専用の文字コードを使用する。
  Unicode に対応した関数を使用するときには _UNICODE #define する。
  _UNICODE モードでは _T の付いた _t の付いた関数、そして API Unicode 用のものへと変換される。たとえば TCHAR wchar_t に、 _tcscmp() wcscmp() へと、そして GetWindowText() GetWindowTextW() に変わる。これらは Unicode の文字列を適切に処理する。
 ただしWin9xでは Unicode API は機能しないので、実際にはWinNT系に限られる。
 
union <ユニオン>
 「共用体」
 C++言語キーワードのひとつ。
  union { } で囲まれた複数の変数は、メモリ上ではたったひとつの領域をすべての変数で共用する。これにより、ひとつのメモリ領域を、様々な型であるかのように見せかけることができる。
 はっきり言って使用するのは危険。プログラムを分かりにくくするため、できる限り使用は控えるべき。
 
unsigned <アンサインド>
 「符号なし」
 「マイナス」にならない整数値
  int char などの「組み込み整数値型」の前に unsigned を付けることで、変数内のビットすべてを値の表現に使用できる。
  Visual C++ ではデフォルトでは signed なので、「符号なし」にする場合には unsigned を付ける必要がある。ただし、ウィンドウズプログラミングでは UINT など、あらかじめ unsigned な型が用意されているためこちらを使用する方がいい。
 基本的に、 unsigned はあまり使用しない方がいいとされる。符号がからんだ計算において、マイナスが表現できないために予想外の結果が出てしまう場合があるためである。
 使用する場合には、 signed に収まらない大きさの値を格納したい場合、ビットフラグバイナリーデータなどの「値以外のもの」を格納したい場合、ポインタや ID などの「マイナスがない値」を格納したい場合のみに使用すべきである。
 
UNUSED_ALWAYS
 「この変数は使いません」
  MFCマクロのひとつ。使用しない変数に対して使用し、「この変数は使用しない」ことを示す。
 実際には、このマクロは空白に置き換わる(変数は残る)ため、このマクロそのものに機能はない。特に関数引数のうち使用しないものに対して使用し、その変数が「この関数内では使用されない」ことをコメントする意味を持つ。また、これにより「変数が一度も参照されていない」という警告を回避する意味も持つ。
 
UTC ( Coordinated Universal Time )
 「協定世界時 / 世界協定時刻 」
 グリニッジ天文台を基準とした時刻
 プログラム上で時刻を取得する場合、関数によってはこの UTC を基準とした時刻が返ってくる。これは日本との時差が存在するため、通常は使用しない。
 
UTF-8
 ( Universal Character Set Transformation Format )
 「マルチサイズ Unicode 」
 文字コードのひとつ。
 日本語の文字列を表示することのできる文字コード。漢字以外のあらゆる国の文字も表現できることから Unicode のひとつとなっている。ただしウィンドウズで使用されているものとは別物。
 文字ひとつに対して1バイト〜4バイトを使用する。 ASCII コードを1バイトで表示できるためこれまでの文字列と親和性が高く、変数もこれまでと同じ char を使用でき、文字を増やしやすいなど多くのウィンドウズ版 Unicode にないメリットがある。現在 BeOS 等で使用されている。
 
 
UUID ( Universally Unique IDentifier )
  「絶対唯一自己証明」<ゆーゆーあいでぃー>
 {3D82AB43-62DA-11cf-AB39-0020AF71E433}のような、数値と文字列による ID ナンバー
  GUIDGEN.exe を使用したり CoCreateGuid() を呼び出すなどして作成する。正確には整数値と文字列を組み合わせた GUID 構造体である。ただしレジストリなどに書き込まれる場合には前述のような文字列として書き込まれる。
 いついかなる場所のどんなPCで作成しても、(確率的に)決して同じ値は存在しない。そのため、ヘッダーファイルActiveXファイル、 COM インターフェイスなどの「一意な存在」を示すときに使用される。
 ただし COM インターフェイスでは目的別に IID CLSID という単語に置き換えられて使用される。
 
VARIANT <バリアント>
 「変化型」
  Visual Basic で使用される Visual C++ でも COM を通して値を受け渡しする場合に使用する。
  Visual Basic では「あらゆる型にもなる型」である VARIANT 型。 API では同名の構造体がこれに当たる。実際に値を格納するメンバ変数 union となっており、これによってあらゆる型に対応する。また、現在の値がなんの型なのかを示すフラグもメンバ変数として持っている。
 これらから分かるように、実際には値の変換が自動的に行われるわけではない。型の変換には API VariantChangeType() 等を使用する。また、 _variant_t というクラスも用意されており、これを使用することもできる。
 
Visual 「画像的」
 Microsoft から発売されている、 Visual studio Visual C++ などの開発環境に必ず付いている単語。はっきり言って、この単語に意味はない。
 
Visual Basic / VB <ビジュアルベーシック>
  Microsoft 社製統合開発環境
 言語に Basic の拡張版を使用した、コンポーネント中心のウィンドウズ向け開発環境。
 ちなみに本辞書は Visual C++ 中心なので Visual Basic に特化した単語は掲載しない予定です。ごめんなさい。
 
Visual C++ / VC <ビジュアルシープラスプラス>
  Microsoft 社製統合開発環境
 言語にC++を使用した、ウィンドウズ向け開発環境。
 ちなみに本辞書はこの開発環境を中心とした単語を掲載している。
 
 
Visual Studio / VS
 <ビジュアルスタジオ>
  Visual C++ Visual Basic 等各種開発環境が入ったパッケージ製品。企業ではこれらの連携でアプリケーションやネットワークシステムを構築する。
 
void
 「からっぽ」<ヴォイド>
 「戻り値ない」という意味のキーワード
 関数が戻り値を返さない場合に void と付ける。一応、のひとつだが、 void 型の変数を作成することはできない。使い道としては「 void キャスト」や「 void ポインタ」くらいだろう。
 戻り値が void と他の型とで「 return で値を返さないか返すか」が変わるため、最近は「テンプレートの敵」と注目を浴びている。ただし、最新の C++ 言語規格では戻り値が void の時に void を返せることになっており、最新のコンパイラはこの規格を備えている。
 
 
voidキャスト( void Cast )<ヴォイドキャスト>
 「キャスト」の一種。すべてのから void 型にキャストできる。が、 void 型変数というものは存在しないため、できるのはキャストすることだけ。また、 void 型にキャストしたあと、他の型にキャストすることもできない。
 通常、マクロの中などで呼び出した関数戻り値に「 void 型へのキャスト」を行う。こうすると関数の戻り値を「使わせない」ことができる。
 また、関数の引数は使用しないと警告が出るが、この警告をキャンセルする場合に使用する場合もある。 Unreferenced() マクロなどがその例である。
 
volatile
 <ボラタイル>
 「気まぐれな」
 変数を宣言するときに付ける修飾子のひとつ。
 たとえば volatile int i; のように使う。 volatile 指定された変数(ここでは i )は「プログラム以外から操作され書き換えられる可能性がある」という意味となる。たとえば他の プロセス から書き換えられる可能性があるということである。また、その場合に事故が発生することを防ぐため、この変数には最適化が行われない。
 仮想メモリを使用するウィンドウズプログラミングにおいて、「他プロセスが直接変数を操作しに来る」ということはまずもってない、もしくは「してはいけない」と考えるべき。よって、 volatile は「特定の変数が最適化されないようにする」ためにあると考えるべきだろう。
 
VSYNC ( Vertical Synchronization )
 「垂直同期」
 ディスプレイが1秒間に画面を更新する回数
 ディスプレイの画面は常に表示されているわけではなく、1秒間に数十回という頻度で更新され続けている。この更新頻度を「 VSYNC 」と言う。
 ゲームなど「できるだけ早く画面を更新したい」場合には、この VSYNC と同じタイミングで画像を更新する必要がある。そのタイミングが早くても遅くても、1度のディスプレイでの更新に複数の画像が混ざってしまうため、画面が見づらくなってしまう。
 
VTBL
 ( Virtual function TaBLe )
 「仮想関数テーブル」
 クラスが持つ、仮想関数へのポインタを格納するための隠されたメンバ変数
 仮想関数は「常に、最初に作られたクラスのメンバ関数が呼ばれる」ような仕組みとなっている。そのため仮想関数は、仮想関数とされたメンバ関数へのポインタをメンバ変数として持ち、それを「一覧表」のような形で格納している。これを「仮想関数テーブル」もしくは「 VTBL 」と呼ぶ。
 あるクラスの変数が作られた時、コンストラクタは、そのクラスが仮想関数を持っていれば、その仮想関数へのポインタを格納するためのメンバ変数を作成する。そのメンバ変数はまとめられ表形式となる。これが VTBL である。
 また、 VTBL とは別に「仮想関数テーブルポインタ」がメンバ変数として作られ、 VTBL へのポインタが格納される。実際に仮想関数が呼ばれる時には、まずこの仮想関数テーブルポインタが呼び出され、その参照先として仮想関数テーブルが呼び出され、最後にその中に含まれる仮想関数のポインタの参照先としてメンバ関数が呼ばれる。
 あるクラスへのポインタがアップキャストされ、そのアップキャストしたポインタから仮想関数を呼び出した場合、コンパイラは仮想関数テーブルポインタそして VTBL を通して「メンバ関数ポインタ」を呼び出すように機械語コードを生成する。これにより、ポインタのキャストがどのように行われても、コンストラクタによって格納された仮想関数が呼ばれることになる。これによってポリモーフィズムインターフェイスが実現される。
 COM 用語の VTBL も同じもの。 VTBL を使用して COM を使用する場合、 COM オブジェクトActiveX ファイル(つまり DLL )の中で作成され、そのポインタを使用する側へと渡す。使用する側はそれを、 COM オブジェクトの抽象クラスである COM インターフェイスで受け取る。そして、使用する側は COM インターフェイスが持つポインタから仮想関数テーブルポインタを参照し、仮想関数テーブルを参照しそして ActiveX に含まれる仮想関数を呼び出す。この方式を用いることで、DLL の実行中リンクを用いてクラスを使用することができる。
 
WAV ( Wave File )
 「ウィンドウズ標準音声ファイル」
 ウィンドウズで音声を扱う時に使用する、音声を格納したファイル、もしくはそのフォーマット
 ウィンドウズが標準でサポートしており、 API sndPlaySound() で簡単に再生できる。そのため、どんな音声形式であろうと、 WAV 形式に変換できれば必ず再生できることになる。
 反面、圧縮等がまったくなされていなかったり、亜流フォーマットが無数にあったりといった面もある。
 
wchar_t ( Wide Character Trait )
 バイトサイズの整数値C++言語に初めから組み込まれている型のひとつ。
  char 型は1バイトのため、日本語の文字列を格納する場合にはふたつずつ使用する必要がある。そこで、それをひとつずつ使用するため、2バイトサイズの変数で「文字ひとつ」を表すための型として用意されたのが wchar_t である。通常は Unicode を格納する。
 また、 MFC の場合、実際にこの型を直接使用するのではなく、 TCHAR を使用して char wchar_t が自動的に切り替わるようなっている。
 
WIN32 <うぃんさんにー>
 「32ビットウィンドウズ」
 32ビットウィンドウズの総称。
 現在のウィンドウズは32ビットがほとんどなので、そのまま「ウィンドウズ」と読み替えてもよい。
 狭義には WIN32API を指す。
 
WIN32API <うぃんさんにーえーぴーあい>
 「32ビットAPI」
 32ビットウィンドウズ用の API
 現在のウィンドウズはほとんどが32ビットのため、 WIN32API をそのまま API と読み替えてもよい。一般には、 API は様々なライブラリを指すため、ウィンドウズ用のものを指し示すために WIN32API と呼ぶばあいが多い。
 
WINAPI
 ウィンドウズ API関数宣言に付いている単語。
 これは呼び出し規約を統一するためのもので、 __stdcall#define で置き換えたもの。
 
 
Windows DNA
 ( Windows Distributed interNet Applications )
  「役割分担」
 インターネット及びイントラネットを含んだ社内情報マネジメントをすべて Microsoft の製品で行うためのアーキテクチャー及び販売戦略。社内情報システムを「インターフェイス部処理部」「データベース」に分け、それぞれに必要なアーキテクチャーとツールを割り当てている。
 「インターフェイス部」はホームページ等を通してクライアントに接触する部分である。「処理部」は「インターフェイス部」からのデータを処理する部分である。「データベース部」は処理されたデータを保存し、管理し、提供する部分である。
 これらはそれぞれVB、VC、InterDevなどを使用してアプリケーションを開発し、実現される。これらすべてを継なげるのはCOM及びDCOMである。
 基本的には、すべてが整えられたアーキテクチャー及びツール、そしてサーバーを使用することでコストの削減を奨めているのだが、すべてをマイクロソフト社製で占めようという販売戦略が見え見えである。
 
Windows NT
 <ウィンドウズエヌティー>
 OS のひとつ。ネットワーク上に接続して使用することを目的としたウィンドウズ
 ネットワーク上でクライアントもしくはサーバーとして使用するためのウィンドウズ。そのためセキュリティシステムが備わっており、 Windows 9x よりも堅牢に設計されている。
 実際、 Windows 9x が MS-DOS を引き継いでいるのと違い、 Windows NT は1からカーネルが設計されているため、真の意味での次世代 OS とされている。
 現在は後継として Windows 2000 が発売されているが、まだまだ NT が稼働し続ける気配を見せている。
 
WinMain()
 一般的なウィンドウズプログラムにおける最初に呼ばれる関数
 プログラマーはこの WinMain() という名前の関数をプログラムに作成する。するとこの関数は、アプリケーションが実行されたとき最初に呼ばれるよう設定される。このような関数をエントリーポイントと言う。
  Unicode 用の関数名は wWinMain() 。このふたつを自動的に切り替える場合には _tWinMain() を使用する。
  MFC を使用する場合には、 MFC の中にすでに WinMain() 関数が用意されているため、プログラマーが作成する必要はない。
 
Winsock ( Windows Socket )
 「ウィンドウズ通信 API 」
  API のカテゴリのひとつ。
 ソケットを用いたネットワーク通信を行うためのライブラリ関数には WS プレフィックスが付いている。
 
WM_ ( Window Message )
 「ウィンドウメッセージプレフィックス」
 ウィンドウを操作するためのメッセージに付いているプレフィックス
 ウィンドウ操作用メッセージの多くはこのプレフィックスが付いている。ただしツリービューコントロールなどダイアログボックスコントロールを操作するためのメッセージは、それぞれ異なるプレフィックスを持つので注意。
 
WNDPROC
 のひとつ。
 関数ポインタの型のひとつ。 API によって「戻り値 LRESULT 、引数が HWND, UINT, WPARAM, LPARAMCALLBACK 付き」の関数へのポインタとして定義されている。この関数はウィンドウプロシージャとして使用するものであり、コールバック関数としてウィンドウズシステムから呼び出される。コールバック関数は、引数や戻り値が決まっていないとウィンドウズシステムからの呼び出し時にエラーが発生してしまうため、このように型が決められている。
 
WPARAM
 ( WORD Parameter )
 <だぶりゅぱらむ>
 メッセージとともに送られてくるデータに使われる
 型としては32ビット符号なし整数値、 unsigned int UINT )と同じ。「 WORD 」という単語は16ビット OS 時代にワードサイズ(2バイト)だった頃の名残なので気にしないでいい。「 Parameter 」は、メッセージを関数と見立てた場合の「引数」としての意味があるからであろう。
 この型のデータをメッセージとともに送る場合、API SendMessage() の第3引数に渡す。また、メッセージとともに送られてきたこの型の値を受け取る場合には、ウィンドウプロシージャの第3引数から受け取る。
 この値をそのまま使うことは珍しいこと。通常はこの値を int などに変換したり、構造体クラスへのポインタへと変換したり、「16ビット整数値がふたつ組合わさっている」と見なして上位 WORD と下位 WORD に分けて取得したりする。送る場合にもこのような様々な型から WPARAM へと変換して送る。
 このような型変換は非常に危険なため、通常のプログラミングでは避けるべき。しかしウィンドウズプログラミングとしては必要不可欠でもある。また、さまざまな型を送受信できるというメリットもある。
  MFC の場合、メッセージを受け取る時に内部的にこの変換を行ってから、任意の型をメッセージハンドラに渡して関数を呼び出すため、比較的安全である。ただしこれは受け取る時のみであり、送るときにはこのような機能を使用することはできない。
 ちなみにもうひとつ値を受け渡しできる。これを LPARAM という。
 
WTL
 ( Windows Template Library )
 ウィンドウズプログラミング用ライブラリのひとつ。
 ATL のサポートクラスで構成されるテンプレートライブラリ。テンプレートライブラリのため DLL を必要とせず、 MFC の代わりになると期待されている。
 使用するには米 Microsoft Platform SDK よりダウンロードする必要がある。
 
XML
 ( eXtensible Markup Language )
 「拡張可能印付け言語」
 テキスト文章にデータ構造を加えるための言語
  C++ 言語では構造体などを使用することで「データ構造」を定義することができる。これに似て XML は、テキスト内の単語や文に「データ構造としてどういう意味を持っているのか」という印を書き加えることができる言語である。
 つまり、単純な文章に、 XML に準拠した方法で印を書き加えることで、文章を構造体、文章内の単語や文をメンバ変数のような形で捉えることができるようになり、文章の処理が簡易になる。
  XML にはその「構造体の定義」そのものだけを作る機能もある。これを「スキーマ」と言い、これによって C++ 言語における型チェックのように文章の整合性をチェックすることができる。
 また、 XML に XSL を加えることで、ウェブブラウザを用いて XML 文章を表示することができる。
 
XSL( eXtensible Style Language )
  XML 文書の表示方法を記述するための言語。 XML 用の CSS と言える。
 
X ファイル
 ( X File )
 ファイルフォーマットのひとつ。 Direct3D 専用の形状ファイル。
 3DCGに必要な、点やポリゴン、テクスチャ等の情報を格納するファイル。 Direct3D 専用。拡張子は .X
 
アーカイブ( Archive )
 「記録保管所」
 ファイル種別のひとつ。
 広義としては、データを格納するファイルのこと。つまり通常のテキストファイルや画像ファイルを意味する。実際には「実行ファイルDLLを除いたすべてのファイル」と言える。ただし、これらが含まれる場合もある。
 狭義としては、複数のファイルをまとめてひとつのファイルにし圧縮したもののこと。つまり lzh や zip のことである。最近はこちらの意味で使用する場合の方が多いと言える。
 ちなみにウィンドウズファイルの「プロパティ」にはこの属性があるが、「特定の場合にバックアップを取るか否か」ということの目安らしい。この属性は上のふたつの意味とはまったく違うものと考えるべきだろう。
 要するに、非常にあいまいな意味を持つ言葉である。
 
アーリーバインディング
 ( Early Binding )
 「先にバインディング」
 COMデュアルインターフェイスを持っている場合、 VTBL を COM を使用することを指す。メリットとデメリットに関してはデュアルインターフェイスの項を参考のこと。
 COM を呼び出したときに VTBL を用いて関数呼び出しの準備を完了してしまうため「 Early Binding 」と呼ばれる。
 
アイコン ( Icon )
 「肖像」
 小さな画像、もしくはその画像を使用するためのリソース
 一般には、デスクトップやエクスプローラーに置かれた、ファイルを表す四角形の画像を指す。また、実行ファイルDLL は、内部にアイコンを持つことができる。エクスプローラーは実行ファイルのアイコンを表示するとき、実行ファイル内に格納されている最初のアイコンを表示する。
 また、アイコンはウィンドウのタイトルバー左側にも表示される。このアイコンは WM_SETICON というメッセージを送ることでセットできる。 MFC の場合には CWnd::SetIcon() というメンバ関数を使用する。
 プログラムとしては、通常はアイコンをリソースとして作成し、実行ファイル内に格納する。使用するときには LoadIcon() という API を用いて、アイコンを指すハンドル HICON を取得し、これを使用する。たとえば WM_SETICON の場合には LPARAM にこのアイコンハンドルを渡す。
 アイコンを直接作成する場合には、画像データを1バイトサイズ型の配列を CreateIcon() という API に渡すことで作成できる。ただし、アイコンは「透明」な部分も持っているためこれも渡す必要がある。
 アイコンは、時と場合によって「サイズ」や「色数」がまったく変わる。「画面のプロパティ」による設定等によって使用できるアイコンが変わってくるため、この部分について注意が必要である。
 
あいまい / 曖昧
 ( Ambiguous )
 様々な意味に取れること。
 コンピューターは0と1しか認識できないため、あいまいなものを苦手とする。たとえばコンパイラは、プログラムの中で「どちらとも取れる」ような記述があるとエラーを出力する。これは、コンパイラが「どちらとも取れる」ものに対して適当な選択を行わないからである。コンピューターで処理を行う場合には、こういったあいまいさを取り除く必要がある。
 ただし、プログラムの「意味的な部分(セマンティクス)」においてはあいまいな部分が多い。オブジェクト指向はその最たるものと言える。このあいまいな部分をどう取り除いて「文法的な部分(シンタックス)」へと変換するかが大きな意味を持つ。
 
アウトオブオーダー ( Out Of Order )
 「丸め込み」
 プログラムとしての命令の順序と CPU が命令を処理をするときの順序が必ずしも一致しない処理方法。
  CPU の命令処理が並列化されている場合(スーパースカラ)、各命令を同時に処理することで多くの命令を素早く処理できる。だが、並列処理ができる場合でも「前の命令が終了しない限り次の命令が実行できない」のであれば、ひとつの処理が終わるまで他の処理ができなくなってしまう(これをストールという)。
 そこで、元々のプログラムの順序に関係なく、先にできる命令を処理してしまう、という方法が最新の CPU では採用されている。この方法を「アウト オブ オーダー」と言う。これにより CPU の高速化が図られている。
 
 
アクセス制御( Access Control )
 オブジェクト中のプロパティメソッド継承元のオブジェクトが、どこからなら閲覧・書き込みを行えるのかを指定したもの。
 publicは、そのオブジェクトにアクセスできる場所からならどこからでもアクセスできる。
 privateオブジェクトが持つメソッドからしかアクセスできず、オブジェクトの外からはアクセスできない(一部例外あり)。
 protectedprivateが少し緩やかになったもので、派生先のオブジェクトのメソッドからもアクセスできる。
 これらはデータの使われ方をデータ自身、オブジェクト側で指定するという部分において大きな意味を持つ。
 オブジェクト内の重要なデータをprivate指定することで、メソッドを通じてのみ内部データとのアクセスを可能にするようにすることができ、結果、内部データを外に渡す時にフィルタを通すような機能を持たせることができる。
 また、メソッドをprivate指定することで、扱いの難しい関数を気軽に作ることができる。メモリ制御など、不用意に使うと問題が起きかねない関数管理するのにとても役立つ。
 アクセス制御を正しく利用することで、オブジェクトをプログラムのいいなりにさせないことができるというわけである。
 
アクセストークン
 ( Access Token )
 「アクセス権限真贋証明書」
 ログオンしたユーザーが「どれだけのアクセス権限を持っているか」を示すもの。
 ログオン時、ログオンに用いられたユーザー ID によって「このファイルは読み込んでも構いませんが、書き込みは不可です」などの「アクセス権限」がシステムによって決定され、その情報がログオンしたユーザーに渡される。この「アクセス権限の情報」を含むものが「アクセストークン」である。
 アクセストークンに含まれる情報は、そのユーザーが誰であり、どういった権限を持っているのかということを示す。また、ユーザーが実行したプロセスに「誰が実行したか」を付加するのもアクセストークンの役目である。
 
アクセラレーター ( Accelerator )
 「加速キー」
 複雑な操作をキーひとつかふたつで操作するためのウィンドウズリソースのひとつ。ショートカットキーのひとつ。
 「アクセラレーターリソース」では特定のメニューコマンドやボタンを、特定のキーを押すだけで実現するよう設定することができる。
 これに似たものとしてニーモニックがあり、アクセラレーターと併用することで操作性が増す。
 
アクティブ
 ( Active )
 「活動中」
 ウィンドウが前面に来て、マウスなどによる操作を受け付けることができる状態
 ウィンドウのクリックやタスクバーでの操作で、ウィンドウがアクティブ状態となる。アクティブとなったウィンドウは、前面に来、タイトルバーの色が変わり、イベントを受け付けられる状態となる。
 アクティブなウィンドウの取得には GetActiveWindow() という API を使用する。また特定のウィンドウをアクティブ化する場合には SetActiveWindow() という API を使用する。ただし、 Windows 98 / 2000 では、むやみなアクティブ化によって他のアプリケーションを邪魔しないようにするため、簡単にはアクティブ化できないようになっている。
 
アサーション( Assertion )
 「自己主張」
 「エラー処理」のひとつ。
 アプリケーション内で予期せぬ結果が発生した場合に「アサーションを起こさせる」ようプログラムを組むことができる。アサーションが発生した場合、アプリケーションの実行を停止させ、発生した位置を知らせることで「何か問題が発生した」ことを知らせる。場合によっては強制終了させることもできる。
 C ランタイムライブラリ assert() MFC ASSERT() を使用する。これらはマクロとして作成されており、デバッグ時にのみ機能するよう設計されている。つまりいわゆる「リリースビルド」時には削除されるということである。そのため、 assert() 等の評価部分で関数呼び出しなどを行った場合、その関数呼び出しそのものが削除されてしまうため、デバッグビルド時とリリースビルド時とでプログラムが異なるという問題が発生する。この問題を回避したい場合には、 MFC の VERIFY() という「削除されないアサーション」を使用すればよい。
  assert() や ASSERT() 内の評価方法は、 if と逆、つまり「0であればアサーションする」ということに注意。また、これらから分かるとおり、「本質的なエラー」の発生によって自動的にアサーションさせられるとういことはない。アサーションが発生するということは、なんらかのプログラム上のチェックに引っかかったということであり、それを調べることで対策を講じることができる(特に MFC を使うプログラムの場合)。
 
アセンブラ ( Assembler )
 「組み立て工」
 機械語を分かりやすくしたプログラミング言語
 機械語とほとんど同じような命令を行えるため、高速で最適なプログラムが組める。と言っても、ウィンドウズでは本当の意味での「直接 CPU を操作する」ことは不可能。
 C 言語では「インラインアセンブラ」と呼ばれる方法で C 言語プログラムの中にアセンブラを組み込める。この方法の場合、比較的安全にプログラムを組めるため、アプリケーションの高速化に使用される場合がある。
 また、デバッグ時には「混合モード」を使ってプログラムとアセンブラコードを同時に見られるため、アセンブラを読むことができれば「コンパイラがどのような機械語を生成したのか」を確認することができる。
 
 
アップキャスト( Up Cast )「上方向型変換」
 クラス継承方向へのキャスト
 「上」なのは、クラス図を書いたときに継承元が上に、継承先が下に来るため。木の「根」を思い浮かべると分かりやすい(「枝」を思い浮かべてはいけない)。
 通常のアップキャストはそれほど意味はなく、単なるキャストに過ぎない。ポインタへのアップキャストは非常に大きな意味があり、ポリモーフィズムを実現するときなどによく利用される。多重継承の場合、ポインタへのアップキャストの前と後でポインタの値が違うことも大きい。これらはオブジェクト指向プログラミングと深く関わっている。
 基本的にアップキャストは継承元方向のため安全だが、継承構造が複雑な場合にはうまくいかない場合もある。そういった場合のためにも dynamic_cast の使用を勧める。
 
アトミック ( Atomic )
 「分割不可能」
 主にふたつの意味で使用される。
 「たったひとつ」:様々な存在から共有される、たったひとつのオブジェクトを「アトミックな存在」という。また、その管理のために使用する同期処理やロックカウントなどを「アトミックな操作」という。
 「成功か失敗」:トランザクションなど、「成功か失敗」、つま中途半端に失敗した状態が発生しない処理を「アトミックな処理」という。たとえば「何かの移動」の場合、「コピーと削除」を組み合わせて行うが、このとき何らかのエラーで「コピー」のみもしくは「削除」のみが実行された場合には問題が生じてしまう。このようなことが起きず、「移動」という単位で成功か失敗かしか結果がない処理を「アトミックな処理」という。
 
アトム( Atom )
 「原子」
 主にふたつの意味。
 1:最小構成要素。たとえば整数、変数、予約語などのこと。しかしC++言語ではこの意味で使われることは少ない。
 2:特定の整数値、もしくは文字定数と整数の組み合わせ
  GlobalAddAtom() というAPIを用いてウィンドウズシステムに「特定の整数値」か「特定の文字列」を登録することができる。これはシステムグローバルなものとなる。「特定の文字列」を登録した場合には対応する整数値が与えられる。この文字列と整数値は一対一の関係となり、同じ文字列なら常に同じ整数値が帰ってくる。
 この「特定の整数値」と、文字列を登録したときの「返ってくる整数値」を「アトム」と呼ぶ。実際には2バイトサイズの整数値である。
 これらを登録することで、「値」や「文字列」がかち合わないようにすることができる。ただし、このシステムが機能するためには GlobalFindAtom() などでチェックされなければならない。
 また、システムグローバルなため、プロセス間でのデータのやりとりにも使われる。実際 DDE で使用される。だがアトムとして登録される整数値は2バイトサイズということや、文字列は255文字までと決まっていることなどもあり、実際にはファイルマッピングの方がよく使われる。
 ちなみにプロセス内のみで通用する「ローカルアトム」というものもあるが、あまり使い道はない。
 
アドレス ( Address )
 「メモリ住所」
 メモリ上の位置を示すための整数値。Win32では32ビットサイズ。
 メモリは「オンとオフ」のスイッチで構成され、そのスイッチが8つ集まって1バイトとなる。このバイトひとつひとつに整数値が割り振られ、メモリ上の場所を一意に特定することができる。この整数値が「アドレス」である。また、このアドレスを格納するための変数がポインタである。
 アドレスは、メモリ上にあるものであれば必ず存在する。たとえば、実行ファイル等もメモリ上に置かれるため、その関数にもアドレスが存在する。これが関数ポインタである。
 ただし、アドレスは絶対的なものではなく、各プロセスごとに作成される「仮想アドレス」である。これにより、他のプロセスのアドレスに直接アクセスできないようにしている。また、実メモリとハードディスク上のスワップファイルをまとめて使用しているため、アドレスが物理的にどこを指しているかは定かでない。このシステムにより、大量のメモリを特に気にせずに使用することができる。
 また、これとはまったく別に、 IP アドレスを指す場合もある。
 
アパートメントスレッド
 ( Apartment Thread )
 COM 用語。ユーザーインターフェイススレッドと同意。
 
 
アペンドモード
 ( Append Mode )
 「追加状態」
 ファイル入出力や標準 C++ ライブラリ iostream 系クラスでのモードの一種。このモードの場合、元々あるファイルデータや文字列の最後にデータを加えていくことになる。何らかのログを録る場合などに便利。
 
アライメント
 ( Alignment )
 「整列」
 主にふたつの意味がある。
 「構造体メンバ変数最小サイズの統一」という意味で使われることが最も多い。
  Visual C++ のデフォルトでは、構造体内のメンバ変数のサイズが8バイト以下のサイズだった場合、コンパイラが無駄な領域(パディング)を加えて8バイトちょうどもしくは4バイトちょうどにしてしまう。そのため、構造体のサイズはたいがい8の倍数となる。このように、構造体内に置かれたメンバ変数を「数バイトずつ」に置くよう並べられることを「アライメント」と呼ぶ。
 アライメントが整えられる理由は、そうされることでコンピューターが処理しやすくなるからである。コンピューターや OS が「32ビット」であればすなわち「4バイト」がもっとも計算しやすいサイズであり、そのために計算しやすいよう4バイトの倍数に並べられるのである。反面、ファイルからバイナリーモードで直接構造体に書き込む場合などには、無駄な領域が邪魔になることが多い。
 アライメントは Visual C++ であれば【プロジェクトの設定】ダイアログの【 C/C++ 】−【コード生成】ページの【構造体メンバのアライメント】で変更できる。また #pragma pack を使用しても変更できる。
 C++ 言語においてクラスと構造体はほぼ同じであるのにクラスについては触れない理由は、クラスは仮想関数継承などの関係で内部のメモリ状態が複雑な場合が多く、そのためアライメントのようにメモリ状態を気にするようなプログラムは組むべきでないからである。これは逆に言えば、 C++ のプログラミングスタイルとしては、構造体に関してもアライメントにこだわるようなプログラムは組むべきでないとも言える。
 もうひとつ、単純に「絵的な整列」を指す場合もある。コンソールへの出力を「右揃え」などにしたりする場合や、ダイアログボックスコントロールを綺麗に並べる場合などに「アライメントを整える」と言ったりする。
 
アンマップ
 「Unmap」
 すでに行ったマッピングを解除すること。意味は、どのようなマッピングをしたかにより異なる。
 
 
委譲 ( Delegate )
 <デリゲート>
 オブジェクト指向プログラミングにおける専門用語のひとつ。
  あるクラスが、他のクラスを何らかの形で持ち、他クラスの機能を、自クラスを通して呼び出すことでまるで自クラスの機能であるかのようにみせかけること。つまり、特定の機能を自クラスに持たず、その機能をすでに持つ他クラスに機能の実行を「譲り委ねる」わけである。こうすることで、複数のクラスの機能をひとつにまとめることができる。
 委譲は集約コンポジションを用いて実現する。委譲は継承とは違うものとして定義されているため、 private 継承は実現する方法にはならない。
 委譲は継承に比べてクラス数が少なくて済むというメリットがあるが、クラス間の関係が複雑になる依存度が高くなるというデメリットもある。
 
移植
 ( Porting )
 あるコンピューターまたは OS で動くよう作られたプログラムを、他のコンピューターまたは OS で動くよう書き換えること。
 「移植する可能性が低い」プログラムも、 OS のバージョンアップによって実質的な「移植」を強いられる可能性があるため、どのようなプログラムであっても移植しやすいプログラムの作成を心がけるべきである。
 たとえ同じ言語を使用しているとしても、 OS の差は想像以上に大きいため、移植作業は困難を極める場合が多い。この問題を避ける場合には、コンパイラの機能のうち標準のものを使用する、多くの環境で使用できるライブラリを使用する、などの方法が役立つ場合がある。
 
イテレーター( Iterator )
 「反復子」
  STL で使用されるクラス
 STL には「アルゴリズム」と呼ばれる関数群がある。これらは「渡されたポインタをひとつ進め、参照先に何かをする、を最後まで繰り返し行う」という機能を持っている。この機能のおかげで、配列などを簡単に処理できるようになる。
 アルゴリズムが受け付けるのは「ポインタ」ではなく「ポインタのように動作するもの」である。つまり「 ++p 」や「 *p 」が実行できればポインタでなくてもアルゴリズムに渡すことができるのである。
 そこで、クラスの「演算子のオーバーロード」を使用し、これらの演算子と同等の機能を持たせ、アルゴリズムに渡せるようにしたもの、それが「イテレーター」である。
 つまり、イテレーターはポインタのように機能するクラス、もしくはポインタそのものである。また、イテレーターが求められている場合には、たいがいポインタも渡すことができる。
 イテレーターは std::iterator というクラステンプレートを使用して自作することもできる。また、 std::vector など STL が持つコレクションクラスや、 std::iostream などの iostream 系クラスにも備わっている。
 つまり、イテレーターとアルゴリズムを使用することで、実装に寄らない統一的な操作を行うことができ、可読性が増すことになる。
 
イメージ
 ( Image )
 「画像、印象、概念」
 非常に意味の広い言葉。
 「画像」という意味で使われることが最も多いと思われる。画像とはビットマップアイコンなどを指す。
 「バイナリー表示」という意味で使われる場合もある。実行ファイルの中身を直接バイナリー表示したものを「実行ファイルのイメージ」と呼んだりする場合がある。
 単に「そういう感じ」という、文章上の意味として使われる場合もあるので注意。例:「メモリってスイッチが並んでるの?」「そうそう、そういうイメージ」。
 
 
イベント( Event )「出来事」
 主にふたつの意味がある。
 ひとつはそのままの意味。つまり「何かが起きたということ」という意味。
 たとえば「左クリックされた」「ウィンドウアクティブになった」などが「イベント」の一種と言える。実際の使用方法としては「何らかのイベントが発生すると、それに関連づけられたメッセージウィンドウプロシージャへと送られる。 MFC はさらに、関連づけられたメッセージハンドラを呼び出す」のような使い方をする。
 もうひとつの意味は、マルチスレッドやマルチプロセスで使用する同期オブジェクトのひとつとしての意味。
 機能はミューテックスセマフォの中間。TRUEかFALSE、1ビットのフラグを持ち、それによって同期を取る。また、 WaitForSingleObject 等によって自動的にフラグを変更する(シグナルの使用)かしないか決めることもできる。
 
イベントドリブン / イベント駆動
 ( Event Driven )
 「対応型」
 イベントの発生に対応して関数が呼ばれる形式のプログラム、もしくはシステム。
 従来のプログラム、特に CUI 用プログラムでは、 main() 関数から始まりそのまま一直線にプログラムが実行され終了する。だが、最近のプログラム、特に GUI 用プログラムでは、「何かが起きた」というイベントに対応する形で関数が呼び出され、その関数の中に「起きたことへの対処」を実装するという形式が中心となっている。
 ウィンドウズでは、イベントはメッセージとしてウィンドウズシステムから送られる。アプリケーションはそのメッセージひとつひとつをウィンドウプロシージャで処理する。この仕組みを取ることで、「イベント」に対して「ウィンドウプロシージャ内での実装」が実行される、ということを実現している。
 MFC にはメッセージハンドラという機能がそなわっており、これを使用することで「特定のイベントに対し特定のメンバ関数を呼び出す」という仕組みを簡単に実現できる。
 
イベントログ
 ( Event Log )
 エラー情報を書き込むためのシステム
  Windows NT では、エラーが起きた時にそれを知らせ記録するためのシステムが存在する。それが「イベントログ」である。イベントログは OpenEventLog() などの API を使って書き込む。ログを見るときには「イベントビューア」というアプリケーションを使用する。
 一般的な「イベント」とは別のものと考えるべき。
 
意味解析
 ( Semantic Analyze )
 単語の並びが合っているか調べること。
 文字列解析を行う場合、まず字句解析構文解析を行う。構文解析の結果、単語は優先順位順に並ぶが、この並びが正しいかどうかを調べる必要がある。これを「意味解析」と言う。
 たとえばコンパイラコンパイルを行うときに「z = ++x * --y;」というプログラムに対して「 ( z = ( ( ++x ) * ( --y ) ) )」という構文解析を行ったとする。この結果に対して「 ++ は単項演算子」「 * は2項演算子」などの「 C 言語のルール」を元に「各演算子に適用できるオペランドの数」等を調べ、それが合っているかどうか調べる。これが意味解析である。
 意味解析が通れば、プログラムはコンパイラに「理解された」ことになり、機械語へと翻訳されることになる。
 
インクリメンタルリンク ( Incremental Link )
 「差分リンク」
 リンクの方法のひとつ。2度目以降のリンク時に、1度目と違う部分のみをリンクする方法。
 コンパイル後の中間ファイルをリンクすることで実行ファイルDLL が作られる。その後、プログラムを修正して再びコンパイルした場合、一部の中間ファイルのみが変更されたことになる。通常のリンクでは再び全ての中間ファイルをリンクするが、「インクリメンタルリンク」では変更のあった中間ファイルのみを差し替える形でリンクする。
 インクリメンタルリンクを行うことでリンクが早く終了するが、反面、インクリメンタルリンクを行うための準備が最初に作られた実行ファイル等に行われるため、実行ファイル等のサイズが大きくなる。そのため、通常インクリメンタルリンクはデバッグ時にのみ行う。
 Visual C++ では /INCREMENTAL オプションで行うことができる。また【プロジェクトの設定】ダイアログの【リンク】−【カスタマイズ】ページの【インクリメンタル リンクを行う】でも設定できる。
 
インクルード ( Include )
 「取り込み」
 ヘッダーファイル読み込むこと、またはそうするように指定すること。
 特定のヘッダーファイルを読み込む場合、通常 #include というプリプロセッサを使用する。コンパイラの設定で行える場合もある。
 コンパイルはソースファイル単位で行われる。このソースファイル内にない関数クラスを使用する場合、コンパイルに必要な情報を事前に記憶する必要がある。「必要な情報」は通常ヘッダーファイル内にあるため、ヘッダーファイルを「読み込む」必要がある。この「読み込む」ことが「インクルードする」ということである。
 
印刷
 ( Print Out )
 プリンター等の「印刷用デバイス」を用いて、文章や絵を紙に書き込むこと。
 印刷をプログラムとして実行する場合、プリンター等を直接操作することはない。代わりにプリンター専用のデバイスコンテキストを作成し、それに対して描画することで印刷する。 MFC の場合にはデフォルトで印刷機能が備わっている。
 単なる印刷であれば画面に出力しているデバイスコンテキストをそのまま印刷すれば良いが、より綺麗に出力する必要があるのであれば、 RGB から CMYK への適切な変換や、元画像を大きくし解像度を細かくするなどの作業が必要となる。
 
 
インスタンス( Instance )「実体」
 いわゆる特定のの「変数」のこと。また、ポインタ参照の場合にはその参照先の変数のことを表す。
 オブジェクトは「インスタンス」の意味も持つ場合がある。オブジェクトには「もともと存在している」感じがあり、インスタンスには「型があり、それを元に作成された実体」という意味が強い。
 これとは別に、ウィンドウズアプリケーションの置かれたメモリ領域としての意味もある。この場合、インスタンスは「プロセス」とほぼ同意となる。元の意味としては同じだが、変数として直接アクセスすることはできない。 HINSTANCE というハンドルを介して操作する。ただし、インスタンスハンドルの値はデフォルトではすべて 0x00400000 である。これは、インスタンスハンドルがベースアドレスであり、実行ファイル等の設定によって決定される値であるためである。
 また、テンプレートインスタンスは元の意味は同じだがまったくの別物。
 
インターセプト ( Intercept )
 「横取り / 割り込み」
 何かの処理を横から邪魔して、データや処理を横取りすること。割り込みとも言う。
 
インターネット ( Internet )
  IP に則った、コンピューターが相互に通信を行うための方法
 コンピューター通信の古い方法は、直接電話を継なぐものであった。インターネットは、コンピューターどうしを「網の目」状に継なぎIP アドレスによってコンピューターを一意に識別できるようにしたため、同時に多くのコンピューターとアクセスできるようになった。
 インターネットに接続したあと、どのような処理を行うかはどのプロトコルに則るかによって決まる。
 
 
インターフェイス
 ( Interface )
 「接触面」
 広義には、何かと何かが接触する部分を指す。これによる派生語にユーザーインターフェイスなどがある。
 「インターフェイス」という単語には、主にみっつの意味がある。
 ひとつはハードウェアとしてのコネクタ。プログラミングとはあまり関係ない。
 ふたつめはオブジェクト指向プログラミングでのメソッドを意味する。
 みっつめは抽象クラスとしての意味。 COM で使用するクラスは抽象クラスを用いて動的に DLL をロードするため、このクラスのことも「インターフェイス」と呼ぶ。
 
インプリメント / 実装
 ( Implement / Implementation )
 「遂行」
 定義部をプログラミングすること。「実装」とも言う。
 具体的には関数内部を記述することを意味する。もしくは「定義部」そのものを表すこともある。
 プログラムを作成する場合、まず関数やクラスの仕様を決め、互いの関係図を作成する。これにより、関数とクラスの宣言部が作成できる。
 その次の段階として、関数およびメンバ関数の中身をプログラムすることになる。これを「インプリメントする」もしくは「実装する」と言う。
 API など、一部のライブラリは実装部を隠蔽化している。また、自分が作った関数であっても実装部を確認してから使用することを徹底することは難しい。そのため、関数の使用を難しくするような実装を行うべきではない。宣言部が分かりにくく、渡した引数がどう処理されるか分かりにくい関数を使用する場合には、実装部を見たり、動作について試行錯誤しなければならなくなる。関数の宣言部を分かりやすくし、その宣言どおりに関数を使用すれば期待通りの結果を実装部がもたらしてくれる、それが理想的な関数である。
 「インプリメント」と「実装」の使い分けは、「インプリメント」はオブジェクト指向プログラミングで比較的よく使われ、「実装」はそれ以外の広い分野で使われることが多い。
 
隠蔽( Hiding )
 「何か」から隠すこと
 「プログラマーから強制的」に隠す場合、それはソースファイルがないことを意味する。ヘッダーファイルのみの情報で関数クラスを使用することで、実装部について考えさせない。ウィンドウズAPIなどがこれに当たる。
 「コードは付いているが見ずに済む」という場合もある。関数のオーバーロードテンプレートなどを使用することで、実際のオブジェクトの操作と内部的な動作を結びつけさせない。
 クラスにおいてはカプセル化と同じ意味であることが多い。
 
インポート ( Import )
 「搬入口」
  DLL からエクスポートされた関数クラス使用すること。
  DLL 内のクラスや関数を使用する場合、その宣言を書き、宣言部に __declspec(dllimport) と書く必要がある。このように指定することそのものを「インポートする」と表現する。
  API MFC を使う場合、インポートに関しては気にする必要はない。たとえば API の各関数宣言に書かれている WINBASEAPI __declspec(dllimport) を置き換えたものであるため、わざわざ宣言部を作成する必要はない。
 
インラインアセンブラ ( Inline Assembler )
 「 C 言語内アセンブラ」
 C 言語のプログラムの中でアセンブラのプログラムを書く方法。
  Visual C++ では、 __asm キーワードを使用することで、 C 言語で書かれたプログラムの中にアセンブラで書かれたプログラムを組み込むことができる。これを「インラインアセンブラ」という。
 
インライン関数 ( inline Function )
 「行間関数」
 関数を呼び出した部分に、実際の関数の中身が埋め込まれる、という機能を持つ関数。
 通常、コンパイルされた関数は機械語に変換され実行ファイル等の中に置かれる。これは当然メモリ上に置かれるので、置かれた場所にはアドレスが存在する。この関数を呼び出す部分には、そのアドレスが書き込まれ、実行時には関数のある場所へジャンプすることになる(関数ポインタも参照すること)。
 インライン関数はコンパイル時に、関数を呼びだしている部分に直接機械語のコードを埋め込む。これにより「アドレスを使ってジャンプする」ことがなくなり、実行速度が増す。反面、関数の「複製」が増えやすくなる分、コンパイル後のファイルサイズは増えることが多い。
 C++言語では、関数の前に inline という単語を付けるか、クラス定義内に直接メンバ関数実装することで、インライン関数として指定することができる。
 関数のインライン化は一種の最適化とも言える。また、インライン化は常に行われるとは限らない。デバッグ時などにはインライン化されないので注意すること。
 
ウィンドウ ( Window )
 「窓」
 一般的には、アプリケーションからのデータを出力し、マウスやキーボードによる入力を受け付ける四角い枠を意味する。タイトルバーを持ち、その端に「最大化」等のボタンを持つ。またメニューやツールバーも持っていることが多い。ウィンドウは移動でき、サイズを変更できる。
 実際には、ウィンドウは入出力を行うとは限らず、プロセスとも基本的に無関係であり、また4角である必要もないし、非表示の場合もある。また、「ボタン」や「リストボックス」等のダイアログボックスコントロールもウィンドウの一種である。
 ウィンドウはウィンドウズが管理しているため、直接ウィンドウを操作することはできない。操作する場合には「ウィンドウハンドル」と呼ばれる HWND の変数を、 GetWindowText() などの API へと渡すことで行う。 MFC では CWnd というラッパークラスが用意されている。
 
ウィンドウ間通信
 ウィンドウ間でデータのやりとりを行う場合、メッセージの送受信を行うことで実現する。
 まず送信先ウィンドウのハンドルを取得する必要がある。ウィンドウハンドルはウィンドウクラス等を元に FindWindow() 等の API を使用することで取得する。
 次に SendMessage() や PostMessage() を使用してメッセージを送信する。送信するメッセージは既存のメッセージでもいいし、また WM_USER にいくつか値を加えたものを送信してもよい。ただし後者の場合には RegisterWindowMessage() を用いてメッセージを登録することを勧める。
 受け取る側は、そのメッセージに対する処理をウィンドウプロシージャで行う必要がある。 WM_USER が使用されている場合には当然同じ値のメッセージを受け取る必要がある。また RegisterWindowMessage() が使用されている場合には受け取る側も、 RegisterWindowMessage() を呼び出すことで得られる値のメッセージを、受け取る必要がある。
  MFC の場合、新たに定義したメッセージを受け取る場合には DECLARE_MESSAGE_MAP 等のマクロを使用するか、 CWnd::WindowProc() をオーバーライドしてその中で処理する必要がある。
 送受信するウィンドウが同一のプロセスに含まれている場合には、 WPARAM および LPARAM にはポインタを渡すことができる。
 送受信するウィンドウが別のプロセスの場合には、仮想メモリの関係でポインタを渡すことができない。そのため、文字列構造体を渡す場合には、ファイルマッピング等を使用する必要がある。またこの場合、同期処理をしなければならない場合もある。
 
ウインドウクラス ( Window Class )
 「ウィンドウ分類」
 ウィンドウの大まかな特徴による分類、もしくは分類ごとの名前
 ウィンドウを作成する前に、まず「ウィンドウクラス」と呼ばれるものをウィンドウズに登録する必要がある。大まかな設定を持つウィンドウクラスを元に、細かい設定を持たせて作られたものが「ウィンドウ」となる。
 ウィンドウクラスは API RegisterClassEx() を呼ぶことでウィンドウズに登録する。このとき、登録したウィンドウクラスに名前を付ける。この名前を「ウィンドウクラス名」と呼ぶ。このあと、ウィンドウを作成するときにこのウィンドウクラス名を指定することで「どのウィンドウクラスからウィンドウを作成するか」を指定する。
 「ボタン」などのダイアログボックスコントロールは、すでにウィンドウクラス名が登録されているのでその名前を使用する。
  MFC ではウィンドウクラスの登録・指定は自動的に行ってくれるため気にする必要はない。
 実際の所、通常のアプリケーションではウィンドウクラス名を気に掛ける必要はない。ただ、ウィンドウ関係のユーティリティーでは、ウィンドウクラス名がウィンドウを一意に識別する手がかりとなるため重要となる。
 ウィンドウクラスが持つ設定の取得・変更は GetClassLong() SetClassLong() で行う。
 
ウィンドウズオブジェクト( Windows Object )
 「ウィンドウズのもの」
 ウィンドウズ内に確保されたデータ
 「ウィンドウ」や「アイコン」、「GDI 」などがこれに当たる。
 ウィンドウズオブジェクトは「 Create なんとか 」という API を使って作成される。直接操作することはできず、作成時に返されるハンドルを操作するための API に渡すことで間接的に操作する。
 ウィンドウズオブジェクトは「リソース」や「グローバルリソース」とも呼ばれる。
 ウィンドウズオブジェクトは、ウィンドウズ全体でグローバルな存在のため、不必要なウィンドウズオブジェクトを削除せずにおくとメモリを無駄に消費する。また、まだ使用する機会のあるオブジェクトを削除すると、そのオブジェクトが使用できなくなり他のアプリケーションに迷惑を掛ける場合もある。
 
ウインドウスタイル ( Window Style )
 「ウィンドウ形式」
 ウィンドウの特徴を決める設定
 「普通のウィンドウ」と「ダイアログ」と「ボタン」の形状が違うように、ウィンドウはそれぞれ違うスタイルを持つことができる。これを「ウィンドウスタイル」という。ウィンドウの設定のため、当然ウィンドウズ内部に保存され、 API を使って取得・変更する。
 ウィンドウスタイルはウィンドウ作成時にまず決める。 API CreateWindowEx() であれば第4引数に設定を渡す。作成後は GetWindowLong() SetWindowLong() で取得・変更できる。
  MFC では少し違い、 CWnd::PreCreateWindow() が呼ばれたときに設定を行ったり、 CWnd::ModifyStyle() という変更専用のメンバ関数が用意されているのでこちらを使用することもできる。
 
エージェント指向
 ( Agent Oriented )
 「代行指向」
 コンピューターが自分で判断し、勝手に処理してくれる、という方向性を持つこと。
 コンピューターは基本的に「人の命令通りに動く」ものであり、それがプログラムである。この一歩先にあるのがオブジェクト指向である。オブジェクト指向におけるオブジェクトは、自分の情報を持ち、自分が成すべきことを知っており、オブジェクトに対して命令を行うことで、オブジェクトは自らが知る適切な処理を行う。
 エージェント指向はそのさらに先を行くものである。エージェント指向におけるエージェントは、情報を理解し、自立的にユーザーの処理を肩代わりする。つまり、これまではユーザーが行わなければならなかった部分を、エージェントは自分で判断して自動的に行ってくれることになる。
 現在は研究段階であり、実用には至っていない。
 
エクスポート ( Export )
 「搬出口」
  DLL の中の関数クラス外から使用できるようにすること。
  DLL 内のクラスや関数が外からインポートできるようにする場合、宣言部に __declspec(dllexport) と書く必要がある。このように指定することそのものを「エクスポートする」と表現する。
 
エスケープシーケンス
 ( Escape Sequence )
 「特別文字」
  \ と組み合わされた文字
  \0 終端文字)や \n 改行文字)はエスケープシーケンスのひとつ。通常はリテラル文字列の中に書き込まれ、普通の文字では表せない意味を持つ。見た目は2文字に見えるが、れっきとした1文字。
 ちなみに、 \ は多くの日本語フォントでは「¥」(円マーク)だが、英文フォントでは「\」(バックスラッシュ)であることに注意(もちろん文字コードとしてはどちらも同じ)。英訳本の多くは「\」で書かれているので注意すること。
 
エディットボックスコントロール ( Edit Box Control )
 「文字列コントロール」
 ダイアログボックスコントロールのひとつ。
 四角いテキスト入力部分を持ち、フォーカスを持つとカーソルが現れ文字列を入力することができる。ウィンドウクラス EDIT ウィンドウでもある。
 文字列へのアクセスは API SetWindowText() および GetWindowText() を使用する。 MFC であれば CEdit クラスを使用するか、 DDX を使用する。
 エディットボックスコントロールは「メモ帳」等に使用されるように、複数行にすることができ、簡単なテキストエディタに使用することができる。ただし、フォントや色の細かい変更は行えない。また、 Windows 9x ではエディットボックスコントロールの実装部分で、文字列を指すポインタが2バイトサイズのため、文章そのもののサイズも2バイト= 65535 までしか入らないという問題がある。テキストエディタとして使用するのであれば、リッチエディットコントロールボックスの使用をお奨めする。
 
エラーコード
 ( Error Code )
 ウィンドウズシステムが出力するエラーの番号
 API の中でなんらかのエラーが発生した場合、 API は SetLastError() を使って各スレッドが持つ「エラーコードを格納する専用の領域」にエラーコードを格納する。 API を呼び出した側は、 GetLastError() でそのエラーコードを取得する。そのコードを調べることで、どのようなエラーが API 内で発生したのかが判る。
 エラーコードそのものは単なる整数値のため、これだけではエラーの意味は判らない。エラーの意味を判別するためには、そのための判別表( WINERROR.H や MSDN の "System Errors - Numerical Order" )と照らし合わせるか、 API の FormatMessage() を使用して表示する。
 
演算子
 ( Operator )
 <えんざんし>
 キーワードのカテゴリーのひとつ。 + や &&~ などのこと。また、 sizeof や dynamic_cast なども、記号ではないが演算子の一種。またキャストも演算子に含まれる。
 左項や右項などの項(オペランド)に対して、四則演算などの処理をするためのキーワード。あらかじめ組み込まれた関数と取ることもできる。演算子には優先順位が設けられており、この順位に基づいて処理される順番が決定される。
 演算子は、実行される処理の内容を再定義することができる。これを演算子のオーバーロードという。
 
演算子のオーバーロード
/ 演算子の多重定義 / 演算子関数
 ( Overloaded Operator / Operator Function )
 C++ 言語の機能のひとつ。あるクラスに特定の演算子を使用したときに「呼び出される関数」を作成する機能。
 通常、クラスには演算子を使用できない。だが、この「演算子のオーバーロード」の構文に則って関数を作成すると、演算子を使用でき、使用したときにこの関数が呼ばれるようになる。作成には operator を使用する。
 ほとんどすべての演算子に対して、オーバーロード関数を作成することができる。ただし、優先順位やオペランド数を変えることはできない。また、オペランドのひとつがクラスでなければならない。つまり「 int 型に対する ++ 演算子のオーバーロード」といったことはできない。
 演算子のオーバーロードを行うことで、複雑な名前の関数を使用せず、直感的な演算子を使用して操作できるようになる。ただし、必ず「直感的な操作」にあったものであること。演算子による操作と一致しない実行結果の場合には、可読性等が低下する可能性がある。
 また、普通の演算子だけではなく、型変換に対しても「演算子のオーバーロード」を行うことができる。型変換演算子を参照のこと。
 
演算子の優先順位
 ( Operator Precedence )
 ひとつの式に複数の演算子がある場合、どの演算子が先に機能するか、その順番
 コンパイラは、式の解釈を確実に行うため、複数の演算子の中でどれをまず機能させるか、ということを決めている。これが「優先順位」である。
 優先順位に依存したプログラムは書くべきではない。プログラムの理解が難しくなるからである。
 
エンディアン ( Endian )
 バイトオーダーのこと。
 
エントリーポイント ( Entry Point )
 「入場口」
 実行ファイルまたは DLL が、実行された時に最初に呼ばれる関数
 エントリーポイントとなる関数が呼ばれることでアプリケーションはスタートする。また、通常はエントリーポイント関数から抜けることでアプリケーションは終了する。
 エントリーポイントはプログラマーが作成する必要がある。
 一般的なC++言語、およびコンソールプログラムは main() がエントリーポイントとなる。
 ウィンドウズプログラムは WinMain() がエントリーポイントとなる。
  DLL DllMain() がエントリーポイントとなる。
 以上は正確に言えば「エントリーポイント」ではない。実際のエントリーポイントは別の関数として用意され、そこから前述の関数が呼ばれることになる。だが、実際には上記の関数が一般的にはエントリーポイントと呼ばれる。
 エントリーポイントとなる関数名は、設定によって変更することもできる。
 
オートマトン
 ( Automaton )
 「ロボット / プログラム」
 一般には、「ロボット」「プログラム」などとほぼ同じ意味。
 プログラムの用語としては、「何らかの入力に対して自動的に決まった出力をする」システムを指す。
 たとえば、自動販売機は「金銭の投入」や「ボタンを押す」などの入力に対して「ジュースを出す」「釣銭を出す」などの出力を行う「オートマトン」と言える。記述には通常状態遷移図を使用する。感覚的にはイベントドリブンなプログラムと言える。
 通常は「有限状態オートマトン」のようにプログラムの内部状態を記述する場合にこの用語が用いられることが多い。
 
オートメーション( Automation )
  Visual C++ 以外から呼び出せるように拡張された COM インターフェイス
 COM インターフェイスを使用する場合、 Visual C++ では抽象クラスを用いる。この場合には抽象クラスの入ったヘッダーファイルを必要とする。 Visual Basic などで使用する場合には、ヘッダーファイルの代わりとなるタイプライブラリを使用する。
 タイプライブラリがない場合には、 COM インターフェイスの各関数を動的に読み込み実行する必要がある。そのための機能を備えた COM インターフェイスが「オートメーション」である。
 オートメーションとしての機能を持つ COM ファイルIDispatch COM インターフェイスを持っている。 IDispatch::GetIDsOfNames() に「関数名」を渡すことでIDを取得し、そのIDと引数を IDispatch::Invoke() に渡すことで目的の関数を呼び出す。つまりこういったことを Visual Basic が自動的に行っているということである。この仕組みのおかげで COM インターフェイスが持つ関数を動的に呼び出すことができる。
  IDispatch とメインの COM インターフェイスは別々のこともあるが、通常は IDispatch の派生クラスとしてメインの COM インターフェイスが実装されているため、この場合には抽象クラスを用いた呼び出しも当然できる。このような「抽象クラス」と「 IDispatch 」の両方でアクセスできる COM インターフェイスを「デュアルインターフェイス」と呼ぶ。
 
オーナー
 ( Owner )
 「管理者」
 一般には「」や「管理者」という意味。
 ウィンドウズでは、主にウィンドウの用語として使用される。この場合、「オーナーウィンドウ」とは「親ウィンドウ」の一種であり、かつメッセージを処理するウィンドウを指す。
 エディットボックスコントロールのような子ウィンドウは、いくつかのメッセージは自分で処理せず、親ウィンドウに送り処理してもらう。この場合、すぐ上の親ウィンドウがメッセージの処理を行えないウィンドウである場合には、このメッセージの送信は意味がなくなってしまう。そこで、メッセージを処理できる、つまりプログラマーが作ったウィンドウプロシージャを持つウィンドウにメッセージを送ることになる。この「メッセージを処理できる親ウィンドウ」を「オーナーウィンドウ」と言う。つまり、子ウィンドウを管理するウィンドウという意味である。
 オーナードローの「オーナー」も同じ意味。ダイアログコントロール自身ではなくオーナーウィンドウに描画してもらうことが「オーナードロー」である。
 
 
オーナードロー
 ( Owner Draw )
 「管理者描画」
 ボタンやリストボックスといった「ウィンドウズから提供されたコントロール」は、メッセージの送信や MFC を用いることで簡単に操作できる。が、逆に言えばできるのは「簡単な操作」のみで、複雑な機能は備わっていない。
 ただし、描画に関しては複雑なものを行えるシステムが備わっている。それがオーナードローである。オーナードローでは、複雑な描画をしたいときに、その描画部分のデバイスコンテキストアプリケーションに解放させることができる。そのため、自由な描画を行うことができる。
 オーナードローを使用するときには、コントロールのウィンドウスタイルに**_OWNERDRAWというフラグを立てる必要がある。このフラグを立てると、描画を必要とするときに WM_MEASUREITEM と WM_DRAWITEM のメッセージが送られてくる。特に WM_DRAWITEM は、同時に描画部分のデバイスコンテキストが送られてくるため、これを利用して自由に描画できることになる。
 ただし、時にはありとあらゆる場合についての描画を行わなければならないため、プログラムが複雑になることがある。
 
オーバーヘッド ( Overhead )
 「諸経費」
 処理に掛かる時間
 プログラムを実行する上で、各部分に掛かる時間のこと。通常は「無駄な時間」など悪い意味で使用される。
 オーバーヘッドが増えることで、アプリケーションの実行時間が無駄に増え、ユーザーにストレスを与えることになる。特に音楽やCGアニメーションなど、リアルタイムマルチメディア関連において、オーバーヘッドをいかに減らすかが重要となる。
 オーバーヘッドはプログラムの設計の見直しや最適化などによって取り除ける場合もある。
 
 
オーバーライド( Override )「上乗り」
 クラス継承を行うとき、継承元の関数と同じ名前・引数の関数を継承先でも作製すること。
 継承を行うことによってプロパティメンバ変数)等を引き継ぐことができるが、継承した以上、メソッドメンバ関数)の振る舞いも変化させたい場合が多い。もしここで、別名の関数を作製すれば、継承元のクラスを使っていたコードをすべて書き換える必要が出てくる。その手間を省くのが、「オーバーライド」ということになる。
 仮想関数に対してオーバーライドを行った場合はポリモーフィズムに使用することができる。実際には、オーバーライドはポリモーフィズムのために行うため、仮想関数以外ではオーバーライドすべきではない
 ポリモーフィズムを使用せず、特定の継承元クラスのメンバ関数を呼び出したい場合にはスコープ解決演算子(::)を使用する。
 名称がオーバーロードと似ているので注意すること。
 
 
オーバーロード( Overload )
 「多重定義」
 ある関数が存在したとき、その関数と同名で、引数の違うものを作製することを「オーバーロード」という。C++言語のみ。
 この機能を用いることで、同名の関数を様々なの変数に割り当てることができ、「オブジェクト指向的」なプログラムを組むのに役立つ。が、引数の型にあいまいな変換があると、思わぬ関数が呼ばれる可能性があり、「見えないバグ」が出やすくなる。また、「戻り値だけが違う」関数のオーバーロードは作成できない。
 また、オーバーロードの応用とも言うべき演算子のオーバーロード型変換演算子もある。
 名称がオーバーライドと似ているので注意すること。
 
音 ( Sound )
 「音声をスピーカーから出力する」といった機能は、 OS ごとに用意された API を使用する。つまり通常は OS によって実装方法が変わるということである。
 ウィンドウズでは「マルチメディア API 」という、プレフィックス snd の付いた関数を使用する。
 
 
オブジェクト
 ( Object )
 「物・対象」
 最も広い意味としては「なんらかの存在」。言い換えるのなら、認識することのできるあらゆるものを指す。
 コンピューターの世界では「存在を認識できるデータ」を指す。本来、コンピューターのデータは単なる「ゼロ」と「いち」の組み合わせであり、それをどう解釈するか、どう処理するかはプログラム側の問題である。が、このデータに「意味」を明確に持たせることで、なんらかの「存在」と認識することができる。こうすることで無機質なデータを直感的に操作できるようになる。
 フォルダファイルウィンドウやただの数字など様々なものがこれに当たる。ただし、現実に存在するハードウェアとしてのドライブなどは「オブジェクト」と呼ばないことが多い。通常は、それを意味するドライバや、さらに抽象化されたデータなどをオブジェクトに含める。
 プログラミングの世界では「必要なら自らもしくは他を操作することができるデータ」のことを示す。「操作」についてはオブジェクト指向を参照すること。
 オブジェクト指向設計オブジェクト指向プログラミングでは、プロパティメソッド継承ポリモーフィズムアクセス制御などの機能をもったデータを指す。ただしこれらの機能は場合によって微妙に変わってくるので注意。このデータの元となる「金型」を「クラス」という。
 言い換えると、クラスによって作成された変数はすべてオブジェクトであるとも言える。この変数は「インスタンス」と呼ばれる場合もある。ただしオブジェクト指向プログラミング言語によっては「クラス」と「オブジェクト」が同一の場合もあるので注意すること。さらに、オブジェクトはコンポーネントとして存在している場合もある。
 なんにせよ、非常にあいまいな単語であることには変わりない。実際には、使用される場面ごとに「どういう意味か」を正確に認識する必要がある。
 
オブジェクト指向( Object-Oriented )
 自分自身でせず対象物に任せるという考え方
 たとえば、人に踊ってもらうとき、「右手上げて」「次左足出して」のように指示するのではなく、「あなたの踊りたいように踊って」もしくは「前に教えたように踊って」とだけ指示して踊ってもらうことを「オブジェクト指向」という。この場合、踊ってもらう「」を「オブジェクト」と呼ぶ。
 非オブジェクト指向では「どう踊るか」をすべて指図する側で管理する必要があるが、オブジェクト指向では「踊る者自身(=オブジェクト)」がどう踊るかを管理する。
 つまり、オブジェクト指向は「一般的な考え方」なのである。
 プログラミングの世界では、「どう踊るか」のような「データ」を「プロパティ」、「踊る」や「踊りを憶える」のような「動作」を「メソッド」という。
 「自分のバランスを取る」など、まわりにとって必要のないデータおよび動作を内部に持ち外に見せないことを「隠蔽化」と呼ぶ。また、「踊れ」という命令に対して、人によって盆踊りやラップなどさまざまな踊りを見せることを「ポリモーフィズム」と言う。
 「プログラミングの世界」では、自然な意味での「オブジェクト指向」的考え方を、プログラミングに便利なように捉えているため、やや無理のある部分も存在する。これらがオブジェクト指向設計オブジェクト指向プログラミングに様々な影響を与えている。
 
オブジェクト指向設計( Object-Oriented Design / OOD )
 オブジェクト指向に乗っ取ったクラスの相互関係図を作成すること。
 実際には UML のような、オブジェクト指向設計専用の規則にのっとり、クラスの関係図を作成する。
 クラスどうしの関係は、現実に存在するものを操作・管理するプログラムであればそれらを真似たクラスを作成するのが望ましいとされる。そうすることで、現実のシステムと書かれたプログラムが一致し、プログラム全体が見渡せるようになり、保守管理が楽になるというメリットがある。ただし、これではプログラムを UML で書いたことになるため、言語のいい部分を生かしきれないというデメリットもある。
 作成されたクラス関係図はオブジェクト指向プログラミング言語へと直接的に翻訳される。あとはクラスが持つメソッドインプリメントするのみである。
 こういったプログラム作成方法をオブジェクト指向プログラミングと言う。
 
 
オブジェクト指向プログラミング
 ( Object-Oriented Programming / OOP )
 もっとも広い意味としては、オブジェクト指向の考え方に乗っ取ったプログラミングのこと。
 と言ってしまうと、隠蔽化を実現している API や、コンポーネントオブジェクトとして扱える Visual Basic を使ったプログラミングも「オブジェクト指向プログラミング」と言えてしまう。
 一般的には、クラスもしくはそれと同一のものを、プログラミング言語レベルで使用するプログラミングを「オブジェクト指向プログラミング」と言う場合が多い。しかしこれだと、ただクラスを使っただけで「オブジェクト指向プログラミングをしてる」ことになってしまい、少なからず弊害がある。
 もう少し意味を狭めるのなら、プログラムの設計にオブジェクト指向設計を取り入れ、継承ポリモーフィズム完全に理解し、積極的に活用するプログラミング、と限定できる。
 最も狭い意味は、オブジェクト指向設計したものをそのままプログラムに変換し、各メソッドインプリメントするだけのプログラミングを指す、というもの。
 現在のオブジェクト指向プログラミングは、この「最狭義」が一番広まっていると思われる。これは、簡素で分かりやすく、システムエンジニアリングにおける方法のひとつとして定着しているためである。
 しかしながら、言語やプログラムのメリットを語るときの「エサ」としてしばしば使用される「オブジェクト指向プログラミング」という言葉は、各広義としての意味を持つ場合が多い。各人は、これらの意味、そして話者の意図に惑わされないようにすること。
 
オブジェクト指向プログラミング言語
 ( Object-Oriented Programing Language / OOPL )
 オブジェクト指向プログラミングのできるプログラミング言語
 と言っても、オブジェクト指向プログラミング自体がとても広い意味を持つため、一概に「この言語がオブジェクト指向プログラミング言語である」と明言できるものではない。
 
オブジェクトファイル ( Object File )
  Visual C++ が生成する中間ファイル。拡張子は .obj
 
オフセット ( Offset )
 「細かいアドレス」
  far ポインタを使用するときに使うアドレス
  far ポインタの中身は、最初の2バイトを「セグメント」、後の2バイトを「オフセット」といい、セグメントに16を掛けたものをオフセットに足した値、がアドレスとして使用される。この仕組みによって、 near ポインタでは表せない範囲のアドレスを表現できる。
  Win32 ではポインタは32ビットサイズに固定されており、 far ポインタも存在しないためこの規則は使用されない。
 
オペランド
  ( Operand )
 「項 / 演算されるもの」
 演算子が演算を行うとき、その処理の対象となる相手
 例えば i++ であれば、 ++ 演算子に対して i がオペランドとなる。また i = 100 であれば、 = 演算子に対して i 100 がオペランドとなる。
  ++ 演算子のような「単項演算子」ならオペランドはひとつ、 = などの多くの「2項演算子」はオペランドがふたつ、 ? : の「3項演算子」はオペランドがみっつとなる。
 特に2項演算子の右側の項を「右辺オペランド」、左側の項を「左辺オペランド」と言う。先ほどの i = 100 の例で言えば、前者が 100 、後者が i となる。
 
親 ( Parent )
 主に基底クラスのことを指す。
 
親ウィンドウ ( Parent Window )
 子ウィンドウを持つウィンドウ
 ウィンドウの作成には、 API では CreateWindowEx() 等を、 MFC の場合には CWnd::CreateEx() 等を使用する。これらの関数を呼び出すときに「親となるウィンドウ」を指定することができる。この指定を行うことで、指定したウィンドウが「親ウィンドウ」に、作成されたウィンドウが「子ウィンドウ」となる。逆に、この指定を行わなかった場合、作成されたウィンドウは親を持たないウィンドウとなる。
 子ウィンドウは常に親ウィンドウの手前に来る。また、通知メッセージなど、一部のメッセージは子ウィンドウではなく親ウィンドウに送られるため、ウィンドウ管理を親ウィンドウで一元管理することができる。
  MFC フレームワークでは、フレームウィンドウが親ウィンドウ、ビューウィンドウが子ウィンドウとなっている。
 また、「親ウィンドウ」は、しばしば「トップレベルウィンドウ」を指す場合もある。
 
 
カーネル
 ( Kernel )
 「核」
 OS中心となる部分。ウィンドウズでは Kernel32.dll という DLL が担っている。
 
改行文字 / 改行コード / \n
 ( New Line Character )
 改行を示す文字エスケープシーケンスのひとつ。
 「改行」を意味する文字。通常はリテラル文字列の中に書き込む。
 ただし、ファイルの中の改行コードはこの限りではない。 Windows が扱うファイルの改行コードは \r\n の2文字からなる。ファイル入出力を行うときに \n と \r\n の変換が行われるため通常は気にしなくて良いが、ファイルをバイナリーファイルとして開いた場合にはこの変換がなされないため、注意する必要がある。また、ファイル中の改行コードは OS によって異なるため、他の OS のファイルを操作する必要がある場合には注意する必要がある。
 
外部キー
 ( Foreign Key )
 「列参照」
 データベースにおいて、他の表の列と同じ意味を持つ列。
 たとえば「学籍番号」というデータはひとつの学校であれば一意のデータとなる。「生徒名簿」の表と「あるクラブに所属する生徒一覧」の表とで、「学籍番号」の列に並ぶデータは同じ意味を持つ。このとき、元データである「生徒名簿の学籍番号の列」を「主キー」、この列を参照する「クラブの学籍番号の列」を「外部キー」と言う。
 
外部シンボル
 ( External Symbol )
 「コンパイル後関数名」
 オブジェクトファイル内にある関数を表す装飾名
 リンカが「オブジェクトファイル内にある関数を呼び出す」ような機械語を生成する場合、その関数を表す装飾名を探して結びつける。この装飾名を「外部シンボル」と言う。
 よく発生する「外部シンボルが見つかりません」というリンカエラーは、この「結びつけ」がうまくいかない場合であり、たいがいは「関数が宣言部はあるが定義部がない」もしくは「関数の宣言部の引数と定義部の引数が違う」のが原因である。
 
下降解析
 ( Top Down Parsing )
 「上から下へ解析 / 全体的解析」
 木構造上(根本)から解析していく方法。まず全体から解析していき、徐々に細かい部分を解析していくことになる。
 これをそのまま実現する場合には、木構造の大きさなどが既知でないと行えないため、実際には再帰下降解析を行う。
 「下から上へ解析する」方法を上昇解析と言う。
 
型 / データ型 ( Data Type )
 「変数雛形」
 ある変数を作るとき、その変数の性質を指定するときに使うもの。
 変数はそれぞれ、サイズやメンバの有無などの性質が決められ、これによって可能な操作が限られてくる。その性質を指定するものがである。
  int double のような初めから存在する組込型、構造体クラスなどのプログラマーが作る型、 typedef を使って別名として作られた型などがそう。
 
 
仮想関数( Virtual Function )
 クラス の変数が「自分が使うべきメンバ関数」を持っている、そういうメンバ関数。
 virtualと指定されたメンバ関数は、隠蔽されたポインタ型のメンバ変数を持ち、クラス型の変数が作成されたときにメンバ関数へのポインタをそのメンバ変数へと格納する。この「仮想関数ポインタのメンバ変数」群を VTBL と呼ぶ。仮想関数を呼び出す場合、この VTBL からメンバ関数へのポインタを通して呼び出す。
 この仕組みにより、継承元の型へのポインタもしくは参照へとアップキャストされた場合でも、常に最初に結びつけられたメンバ関数を呼び出すことができる。
 この機能を利用すると、継承元のポインタもしくは参照から同一名のメンバ関数を呼び出すだけで、継承先の様々なクラスのメンバ関数を呼び出すことができる。そのため、仮想関数は抽象クラスの作成やポリモーフィズムの実現などに使われている。
 ちなみに、クラス型変数のポインタもしくは参照を使用したときのみ、仮想関数は意味をなすことを付け加えておく。
 
仮想キー ( Virtual Key )
 キーボード上の特定のキーを指す整数値
 仮想キーは VK_ プレフィックスとなっている単語であり、 API によって整数値として定義されている。仮想キーは WM_KEYDOWN 等のメッセージと共に送られてくる。また、仮想キーを表す数値テーブル全体を「仮想キーコード」と言う。
 「仮想」なのは「実際のキー」とは違うためである。「 Enter キー」はメインとテンキー両方にあり、どちらも VK_RETURN という仮想キーコードである。実際のキーとは違う、意味としてのキーコードという意味で「仮想キー」と呼ばれている。
 実際には、キー入力に対して仮想キーコードを直接取得するのではなく、変換された文字コードを取得して処理する。これについては仮想キーコードの変換を参照のこと。
 
仮想キーコードの変換 ( Virtual Key Translate )
 キー入力を処理する場合、実際には仮想キーではなく、それを変換した文字コードを使用する場合が多い。
 メッセージループでは通常、 TranslateMessage() という API メッセージを渡す。この関数 WM_KEYDOWN 等を受け取ると WM_CHAR 等を発行し、これに仮想キーを文字コードに変換したものを持たせる。
 たとえば、「A」というキーが押されたことによって WM_KEYDOWN では VK_A が送られ、それが TranslateMessage() に渡されることで WM_CHAR も発行され、この WPARAM に、 VK_A から文字コードに変換した A が送られる。
 この変換は、大文字小文字の変換を自動的に行い、またテンキーボードと通常のキーボードとの違いを無くし、さらに Back Space キーなどの機能キーは無視する、といった機能がある。
 仮想キーコードと文字コードとではこれらの違いがあるため、場合によって使い分ける必要がある。
 
仮想メモリ / 仮想アドレス
 ( Virtual Memory / Virtual Address )
 実メモリではなく、 OS が作ったメモリ、もしくはそれによるアドレス。Win9x / NT / 2000 (つまり32ビットウィンドウズ)においての標準アドレス。
 OS は実メモリとスワップファイルを組み合わせて「メモリ」として使用する。これが「仮想メモリ」である。
 これにより、アドレスに「実メモリの物理的な位置」を使用できない。そこで、 OS は実メモリとスワップファイルから新たにアドレスを割り当て、それを返す。これを「仮想アドレス」と言う。
 32ビットウィンドウズでは、通常この仮想メモリおよび仮想アドレスのみを使用する。実メモリおよびスワップファイルへの直接のアクセスは行えない。
 仮想アドレスには多くのメリットがある。 OS はプロセスごとに「仮想メモリ」を割り当てることができる。これにより、32ビットサイズのアドレス値(最大 0xFFFFFFFF == 4294967295 )を全てのプロセスに返すことができ、 OS 全体で十分なメモリを使用することができる。ただし全ての領域をアプリケーション側で使用できるわけではなく、一部はシステムによって使用される( OS やプロセスの種類によってサイズは異なる)。
 また、プロセスごとに領域が異なるため、あるプロセスが他のプロセスへとアクセスする事を防ぐことができ、他プロセスからメモリを保護することができる。また、同プロセス内でも、実際に使用していない場所へとアクセスしようとした場合もこれを防ぐことができる。これらをした場合例外が発生しページ違反となる。
 特にマルチタスク OS では複数のプロセスが同時に実行されるのが当然のため、この「他プロセスの邪魔をしない」ことが最近の OS において必須の機能となっている。
 
型変換演算子 / 型変換関数
 ( Conversion Function )
 C++ 言語の機能のひとつ。自クラスが、「他の型への変換」を求められたときに呼び出されるよう作成するメンバ関数
 通常、クラスは他の型へのキャストを暗示的に行うことはできない。だが、この「型変換演算子」の構文に則ってメンバ関数を作成すると、暗示的なキャストを行うことができ、使用したときにこのメンバ関数が呼ばれるようになる。作成には「演算子のオーバーロード」と同じ方法を取り、 operator を使用する。
 型変換演算子を作成することで、他の型への変換が簡単になるが、場合によっては思わぬ変換が行われる場合があるため、作成する場合には注意が必要。
 
カバレッジ
 ( Coverage )
 「範囲」
 「範囲( Cover )」という意味の単語。いくつかの意味を持つ。
 プログラミングでは、主にテストツールの用語として使用される。テストツールを使用する場合、プログラムの中ですでにテストした部分とそうでない部分が現れる。その「すでにテストした範囲」を「カバレッジ」という。
 プログラムは、 if などの分岐命令によって、通常実行される部分とあまり実行されない部分に分けられる。だが、プログラムのテストはそのすべての部分に対して行う必要がある。テストツールにカバレッジを表示させることで、あまり実行されてない部分が実際にテストされたのかどうかを視覚的に知ることができ、テストを完璧に行うことができるようになる。また、どのようにテストをしても実行されない部分は「不要なプログラム」ということになるため、その部分を削除することができる。
 
カプセル化( Encapsulation )
 クラスの外からメンバへとアクセスできないようにすること。
 具体的にはアクセス指定子を使用する。外から直接操作して欲しくないデリケートなメンバ変数などに対して private 指定を行い、アクセス専用の public メンバ関数を作成して、それを通してのみ操作できるようにするのが普通。
 人間は財布を持つ。その財布を外に見せびらかせて歩くことはない。 private にするということは「胸ポケットにしまう」ことであり、出し入れする手が public メンバ関数に当たる。
 この場合、包み込むのは「他のクラス」に対してであり、プログラマーに対してではない。言い換えればコンパイラに対しての宣言である。プログラマーにとっては public private も「外に見せている」ように感じるかもしれないが、クラスの世界、コンパイラの世界からは「見せている」「隠している」という重要な意味を持っている。
 
ガベージコレクション
 ( Garbage Collection )
 「ゴミ拾い」
 変数の動的生成を使用する場合に、生成された変数が使用されなくなった時点で自動的に破棄される仕組み。
 基本的な原理は、「 new されたデータへのポインタのポインタ」を密かに取っておき、ときどきそのポインタをチェックして「 new されたデータへのポインタが、もうどの変数にもない場合」に new されたデータを削除する、という方法となる。削除する機能そのものを「ガベージコレクタ」という。
 ガベージコレクションには効率の面でやや問題があるが、プログラムの側で破棄する必要がないためプログラムが組みやすくなるなどメリットも多い。特に「複雑かつ巨大なプログラム」を組む場合には非常に役立つ。
  Java 等の一部のプログラミング言語に装備されているが、 C++ 言語には装備されていないため、 new したらかならず delete する必要がある。もしくはスマートポインタ等を利用する。
 ちなみに発音的には「ガーベジコレクション」もしくは「ガーベッジコレクション」がカタカナ表記としては近いのだが、なぜか「ガベージコレクション」という表記が世間一般には広まっている。
 
カラーコード( Color Code )
 「色略号」
 特定のを示す整数値もしくは単語
 カラーパレットに依存しない特定の色を示す場合、カラーコードを用いることが多い。ただし、これは用いる環境によってまったく異なることが多い。その多くは単純な単語や整数値によって表される。整数値の場合、「光の三原色」の各色を0〜255の値で表す場合が多い。
 一例としてHTMLを上げるなら、「」は #0000FF もしくは blue を指定する。
  API で色を指定する場合、「光の三原色」を RGB マクロに用いることで表す。
 
仮引数
 ( Parameter / Formal Parameter )
 <かりひきすう>
 関数宣言定義に書かれている引数。つまり、一般的に呼ばれる「引数」のこと。
 これは実引数と対比する場合に使用される呼び方である。感覚としては「呼び出した変数に置き換えられるから仮引数」と言えるが、実際には引数は「新たに作成された変数」のため、そういったことはあまり考えない方がいいだろう。現在は「仮引数」という言葉自体使われることが少ない。
 
カレット / キャレット
 ( Caret )
 「カーソル」
 文字を入力する位置を指し示す、棒状もしくは長方形の。「カーソル」と呼ばれることもある。
 カレットはウィンドウズオブジェクトであり、 CreateCaret() などの API を使用して操作する。 MFC には操作するためのクラス等は用意されていない。
 カレットと、実際の「入力位置」にはまったく関係がないことに注意。カレットはただのカレットでしかない。
 
カレントディレクトリー
 ( Current Directory )
 「現在のディレクトリー」
 プロセスが持つ設定のひとつ。フルパスない形式でファイルを指定したときに、そのファイルが存在するとみなされるディレクトリ
 ファイル入出力を行う場合等には、フルパスではなく、単なるファイル名だけを渡しても操作できる。その場合、そのファイル名にカレントディレクトリを加えたものがフルパスとして使用される。
 カレントディレクトリそのものは、操作が CUI 中心で「特定のディレクトリでコマンドを実行する」という方式が一般的だった頃の名残であり、今のウィンドウズプログラミングではそれほど重要ではない。
 カレントディレクトリはプロセスごとに保持される設定である。通常は実行ファイルが置かれたディレクトリが指定される。ただし、 Visual C++ でデバッグモードで実行した場合には、実行ファイルではなくプロジェクトが置かれたディレクトリが指定される。これらの「実行開始時のカレントディレクトリ」は、プロセスを実行するとき、たとえば API CreateProcess() を呼び出すときなどに指定することができる。実行後は、同じく API の GetCurrentDirectory() と SetCurrentDirectory() を使用することで自由に取得・変更を行うことができる。
 
環境変数( Environmental Variable )
  OS が内部に持つ変数
 変数のは通常文字列。 Windows 9x では C:\Autoexec.bat の中で SET というコマンドを使用して設定する。たとえば SET CL=/Zp2 という文があれば、 CL という変数に /Zp2 という文字列が格納されたことになる。 Windows NT / 2000 では「システム」プロパティで設定する。通常環境変数はログインごとに読み込まれるため、変更した場合には再起動が必要。また、ユーザー毎に設定を変えることもできる。
 環境変数は同時に様々なアプリケーションから使用できることが利点である。たとえばヘッダーファイルパスを設定しておくことで、コンパイルのコマンドが簡略化でき、現在のパスなどを考えなくて済むことになる。
 しかし、プログラミングに関しては、こういったことは強力な「開発環境」があれば特に必要としないことであり、実際VCでは使用していない。UNIX系開発環境では依然必要とされているが、使用せずに済ませることもできるため、開発環境が揃ってくれば必要性は下がっていくことだろう。
 
監視 ( Watch )
 マルチスレッド環境では何らかのイベントの発生を察知しなければならない場合がある。
 イベントが「知らせてくれる」場合には、それを受け止める用意をすればいい。同期オブジェクトフラグが立ったかどうかを API WaitForSingleObject() 等で受け取ることができる。また、メッセージとして送ってくる場合もあれば、コールバック関数を登録してこの関数が呼ばれる場合もある。
 そういう機能がない場合には、タイマーをセットし一定時間ごとにチェックする必要がある。決して for などの半永久ループを用いないこと。タイマーなどのイベントドリブンなシステムを使用しないと、他になにもできなくなるだろう。
 
関数( Function )
 渡された値を元に処理を行い、結果を返すもの。
 渡される値を引数、返される値を戻り値と呼ぶ。
 関数は関数から呼び出され、必要な処理を終えてから戻ってくる。また、関数から呼ばれず、 OS から呼び出されるコールバック関数もある。
 C++言語では「何かを行う処理」を関数内に書く必要があるため、関数こそがプログラムの本体と言える。関数の宣言を書くことはすなわちプログラムの設計を行うことであり、関数の定義を書くことはすなわちプログラムを書くことと言える。
 
関数テンプレート ( Function Template )
 「引数型自由関数」
 関数の引数をテンプレート引数にし、を自由に置き換えられるようにした関数。
 テンプレートの機能を関数に使用したもの。関数の引数として渡された変数から自動的に「引数の型」を決められる。これにより、様々な型の引数を処理することができる関数を作成することができる。
 ちなみに「テンプレート関数」ではないことに注意。テンプレートは使用しない限りコンパイルされない。これはつまり、テンプレートは「関数の原型」であって「関数そのもの」ではないということである。「関数テンプレート」は、テンプレートの一種であり、関数ではないのである。
 
関数ポインタ / 関数へのポインタ ( Function Pointer )
 特定の関数へのポインタ
 プログラムも当然メモリ上に格納されるため、関数にも「アドレス」という概念がある。「関数ポインタ」はそのアドレスを格納するものである。通常「小カッコのない関数名」で取得できる。ただし非 static メンバ関数には「メンバ関数を持つ変数のアドレス」も必要なため、通常の意味での関数ポインタは取得できない。
 関数ポインタは「動的に呼び出す関数を変更する」場合や、ウィンドウプロシージャのセットなどに使用する。「動的」なことや「引数の違い」などにより、致命的なエラーを引き起こしかねない方法のため、使用には十分注意する必要がある。
 関数ポインタのメンバ関数版は、通常仮想関数で実現する。
 
 
関連 ( Association )
 オブジェクト指向プログラミングにおける専門用語のひとつ。
 あるクラスが他のクラスへのポインタ参照を持つこと。こうすることでオブジェクトからオブジェクトをいつでも操作することができる。
 これより強い結びつきを集約という。
 
キー
 ( Key )
 「鍵」
 広い意味を持つ言葉。
 一般には「何かを開くために必要なもの」を指す。たとえば「パスワードキー」がこれに当たる。
 辞書においては、格納する要素のひとつを意味する。通常、辞書からの検索等はこのキーを元に行われる。
 また、キーボードに付いているボタンも「キー」と呼ぶ。
 
キーワード
 ( Keyword )
 「組み込み単語」
 コンパイラによってあらかじめ定義されている単語
 int や if などはコンパイラによって定義されており、一意に意味が決まっている。これらの単語を「キーワード」と言う。
 キーワードは予約語となるため、キーワードと同名の変数、関数等(つまり識別子)を作ることはできない。
 
機械語 / マシン語
 ( Machine Language )
  CPU 専用の言語。
 C 言語などのプログラミング言語は、コンパイル後に機械語へと翻訳される。 CPU はこの機械語しか理解できない。
 言語と呼べる代物ではないため、通常はアセンブラへと変換して表示する。
 
基底クラス ( Base Class )
 あるクラス派生して作るとき、その元となったクラス
 という場合もある。
 継承先となるクラスを派生クラスという。
 
キック
 ( Kick )
 「蹴りを入れる」
 何かを実行することを意味する俗語。
 アプリケーションや関数などを実行することを「キックする」と表現することがある。あまり一般的ではないが、英文ではよく見かける。
 
 
逆アセンブル / リアセンブリング( ReAssemble )
 「分解」
 アプリケーションの機械語としてのプログラムをアセンブラの形に変換すること。
 逆アセンブルを行うことで、アプリケーションがどのようなプログラムとして組まれたのかをある程度解析することができる。ただし、基本的にほとんどの市販アプリケーションはこれを禁止している。
 これは、アプリケーションの改変に継ながるからである。逆アセンブルしたものを書き換えるツールがあれば、中身を直接変えられることになり、著作権法違反になる可能性がある。また、「トロイの木馬」のようなウィルスの作製にも継ながるものである。
 ただし、デバッグ時や、コンパイル後に作製されたコードがどのように最適化されているかなどを調べる時には必要なこともある。
 
逆ポーランド記法
 ( RPN / Reverse Porland Notation )
 数式の記述方法のひとつ。
 通常の数式計算では 1+ 2 と書くところを、「逆ポーランド記法」では 1 2 + と記述する。つまり「 左辺 右辺 演算子 」と並ぶ。この記述法は「常に2項演算を行う」というルールに則っている。そのためカッコを省くことができ、 2 * ( 3 + 4 ) を 2 3 4 + * と記述できる。
 逆ポーランド記法で書かれた数式は、通常の数式よりもプログラムでの解読が楽というメリットがある。後入れ先出し構造(以下スタック)のデータ領域をまず用意する。次に逆ポーランド記法で書かれた数式中の単語(数値および演算子)を左からひとつずつ拾っていく。拾った単語が数値ならスタックの終端に追加し、演算子であれば終端からふたつ数値を抜き出し(かつ削除し)て演算し結果を終端に追加する。この繰り返しを続けることで数式全体を計算できる。前述の例では、スタックの中身は [ 2 ] , [ 2 3 ] , [ 2 3 4 ] , [ 2 7 ] , [ 14 ] となる。当然、スタックの状態の数は数式中の単語の数と一致する。
 
 
キャスト
 ( Cast )
 「型変換」
 変数を別のであるかのように見せかけること。
  int 型 unsigned int 型のようにほぼ同じ型の変数でも、 C++ 言語では型チェックが厳しいためそのままコピーすることができない。こういった場合、[ (キャスト先の型)キャストされる変数 ]とすることで変数の型の見かけを変えることができる。
 これは単に見かけを変えるだけなので、しばしばバグの原因となる。 C++ のクラスには型変換演算子を作ることができるので、これをうまく利用することで無理なキャストをせずに済む。また、 dynamic_cast 等を使用するとキャストの目的が一目で分かるなどのメリットがあるためこちらの利用を勧める。
 一応演算子の一種でもある。
 
キャッシュ ( Cache )
 「一時保管庫」
 データを一時的に置いておく場所。
 メモリやディスクへのアクセスにかかる時間は、その回数が増えれば大きな問題となる。そこで、これらのへのアクセスの前に一時的にデータを置く場所を作っておき、そことアクセスすることでタイムロスを省く方法が取られる。この場所を「キャッシュ」という。
 キャッシュは、アクセス元(たとえばCPU)から近くにあるなどの理由で素早くアクセスできるが、反面、コストの関係からデータの蓄積容量は少ない。必要なデータがキャッシュになければ結局メモリ等にアクセスする必要が生じるため、「いかに必要なデータをキャッシュに置いておくか」が重要となる。
 
キュー構造 ( Queue )
 「行列」
 データ構造のひとつ。リスト構造などを利用して、データを並べて格納すること。
 一般には「先入れ先出し構造」として使用することを指す。
 狭義にはメッセージキューを指す。
 
強制終了
 ( Terminate )
 プログラムの流れとは関係なしに、プロセス強制的に終了させること。
 プログラムが無限ループに陥った場合など、そのままではプロセスが終了しない場合がある。その場合、そのプロセスを強制的に終了させる必要がある。また、プログラム内部でも、実行中に深刻なエラーが発見された場合、自らを強制終了させる場合がある。
 強制終了は、 API の TerminateProcess() や ExitProcess() を使用する。また、間接的にこれらを呼び出す、 C ランタイムライブラリの assert() や、 MFC の ASSERT() 等も強制終了を行う。
 強制終了は、必要な後処理を行わないままプログラムを終了させてしまうため、その後処理が必要な場合には問題となる可能性がある。そのため、むやみに強制終了を行うべきではない。そのため、他のプロセスの強制終了は、どうしても終了できない場合に限るべきである。
 assert() のようなアサーションマクロの場合には、「中止」以外を選択することで、強制終了を避けることができる。これにより、アサーションマクロを安全に使用することができる。また、例外処理クラスデストラクタを呼び出すため、デストラクタで後処理がなされている場合には安全に終了させることができる。
 
共有
 ( Share )
 ひとつの存在を複数プロセスから使用すること。
 「ひとつの存在」は主にファイル DLL を指す。変数などの場合もある。
 ひとつのものを複数のプロセスからアクセスすることで、無駄なコピーを作らず、また更新内容をすべてのプロセスで使用できる。
 しかし、書き込み時には同期処理が必要。また「間違った書き込み」を行った場合にはすべてのプロセスに影響が及ぶ。
 
共有メモリ
 ( Shared Memory )
 全てのプロセスがアクセスできるメモリ
 ウィンドウズでは仮想メモリが使用されており、あるプロセスで取得できるアドレスを他のプロセスで使用できない。そのため、ウィンドウズで共有メモリを使用するには特別な方法が必要となる。
 通常、ウィンドウズでは共有メモリの代わりにファイルマッピングを使用する。また、複数のプロセスから書き込みが行われる場合には同期を取る必要がある。
 
共有ライブラリ
 ( Common Library )
 通常 DLL と同じ意味として使用される。
 たとえば「共有ライブラリの MFC を使用し」という文の場合、 MFC の機能をスタティックリンクとして実行ファイルの中に取り込まず MFC42.dll という DLL ファイルを利用することで使用する、という意味である。
 
クエリー( Query )
 「問い合わせ」
 主にふたつの意味がある。
 ひとつは検索機能という意味。MSDNの「検索」は以前「クエリー」と呼ばれていた。また、COMインターフェイス IUnknown::QueryInterface は(多重)継承したインターフェイスへのポインタを調べ取得することができる。
 もうひとつはデータベースコマンドとしての意味。データベースへのアクセスは文字列のやりとりで行われ、その文字列に含める「何をしたいか」という単語を「クエリー」という。
 
矩形 / 四角形 / 長方形
 ( Rectangle )
 「矩形」とは「四角形」のこと。左上の点の座標と右下の点の座標、つまり4つの整数値によって表される。
 ウィンドウズでは「ウィンドウの位置とサイズ」を表す場合に必要となる。通常 API RECT という構造体を用いて扱う。この構造体は2点の座標を格納するための4つのメンバ変数を持っている。また MFC には CRect という、 RECT 構造体から継承したクラスがある。
 
 
クライアント( Client )「お客様」
 主にみっつの意味がある。
 「サーバー」に対する意味。サーバーから何かを引き出そうとする存在を「クライアント」と呼ぶ。
 「人としての顧客」という意味もある。仕事を依頼した人、もしくは会社を「クライアント」と呼ぶ。
 「クラスを使用する側」という意味もある。クラス関数などを作成するとき、それがどのように使われるのかを考える必要がある。その「使う側」を「クライアント」と呼ぶ。
 
クライアントウィンドウ ( Client Window )
 「管理ウィンドウ」
  MDI での親ウィンドウ
  MDI の場合、まず大きなウィンドウがひとつあり、その中に複数のウィンドウが存在する。このうち、「大きなウィンドウ」を「クライアントウィンドウ」と言う。親子関係では、このクライアントウィンドウがであり、その中の複数のウィンドウが子ウィンドウとなる。
 
クライアント領域 ( Client Area )
 「客使用範囲」
 ウィンドウ上の、タイトルバーや外枠を除いた、特に描画を行うための領域
 ウィンドウに描画をする場合、基本的にはウィンドウ全体ではなく、ウィンドウ中央の四角い領域に描画する。この四角の領域をクライアント領域という。
 この領域は、 API の場合 GetClientRect() を、 MFC の場合 CWnd::GetClientRect() を使用して取得できる。この領域に、デバイスコンテキストを使用して描画することになる。
 ただし、 MFC の場合、このクライアント領域にちょうど被さるようにしてビューウィンドウが重なっている。ビューウィンドウはタイトルバーや枠を取り除いた、クライアント領域だけのウィンドウとなっており、このビューウィンドウに描画することでクライアント領域に描画したのと同じ結果が得られる。
 
 
クラス
 ( Class )
 「分類・階級」
 プログラマーが定義する
 内部にメンバ変数と呼ばれる変数を持ち、その変数を操作するメンバ関数を呼び出すことができる。また、継承を行うことで似た機能を持つクラスをいくつも作ることができる。
 「型」であるため当然、変数を作成できる。この変数をインスタンスオブジェクトと呼ぶ場合もある。
 この変数を通してメンバ変数へとデータを格納したり、メンバ関数を呼び出して操作を行う。ただし「呼び出せるかどうか」はアクセス制御によって変わる。
 
クラススコープ( Class Scope )
 クラス内の存在に関する専用のスコープ規則。
 メンバ変数メンバ関数に直接アクセスできるのは、同じクラスか、そう見なされるもののみである。これを「クラススコープ」という。ちなみに「そう見なされるもの」とは、 friend 指定されたクラスや関数を指す。
 クラスの外からメンバにアクセスする場合には、そのクラスの変数を介さなければならない。もちろんそのメンバのアクセス制御 public である必要がある。
 クラススコープはグローバルほど広くなくローカルほど狭くなく、使い勝手がよい。
 
クラステンプレート ( Class Template )
 「引数型自由関数」
 クラスメンバ変数テンプレート引数にし、を自由に置き換えられるようにした関数。
 テンプレートの機能をクラスに使用したもの。メンバ変数の型を明示的に変更することで、様々な型を処理することのできるクラスを作成することができる。
 ちなみに「テンプレートクラス」ではないことに注意。テンプレートは使用しない限りコンパイルされない。これはつまり、テンプレートは「クラスの原型」であって「クラスそのもの」ではないということである。「クラステンプレート」は、テンプレートの一種であり、クラスではないのである。
 
クラスファクトリー( Class Factory )
 クラス 変数を動的に作成するためのクラス。
 クラスはしばしば動的に作成する必要がある。その多くはポリモーフィズムを使用するためである。しかし、その動的作成にクラスごとの依存性があってはポリモーフィズムに硬さが生じてしまう。
 そこで、動的作成をクラスを用いて行うことにし、そしてこのクラスにもポリモーフィズムを使用してしまおう、という考えの基に生まれたのが「クラスファクトリー」である。
 よって、通常クラスファクトリーは基底クラスへのポインタを介して操作され、仮想関数を通して操作される。
 COMインターフェイス IClassFactory もそのひとつ。また、この方法はデザインパターン Abstract Factory と同様のものである。
 
クラスライブラリ
 ( Class Library )
 ライブラリの形式のひとつ。関数よりもクラスを多く持つライブラリ。
 厳密な定義付けはなく、クラスがひとつでもあれば「クラスライブラリ」と呼ぶこともある。 MFC は典型的なクラスライブラリ。ただし、テンプレートが多く使用されているライブラリは優先的にテンプレートライブラリと呼ぶことが多い。この順位は「世代の若い順」と考えるといいだろう。
 
グラフィック( Graphic )「絵」
 なんらかの「」を表示すること。
 通常、表示先はハードウェアとしてのディスプレイ上、さらにはその中のウィンドウ上となる。プリンターから出力する場合でも、まずディスプレイ上に出力してから、という場合の方が多い。
 絵の表示にはデバイスコンテキストもしくは DirectX を使用する。前者は簡単な作図、後者はアニメーション 3DCG を行う場合に使用される。
 
クリック ( Click )
 「カチッ」
 マウスのボタンを押して離すという動作。
 通常はこの動作によってイベントが発生し、メッセージが発行される。「左クリック」であれば、 WM_LBUTTONDOWN WM_LBUTTONUP というメッセージが送られる。 MFC であれば CWnd::OnLButtonDown() CWnd::OnLButtonUp() メッセージハンドラが呼ばれる。
 
クリッピング ( Clipping )
 「切り取り」
 描画を行う場合に特定の範囲を描画させないこと。もしくは描画させない範囲
 ウィンドウズでの描画はデバイスコンテキストを使用するが、このとき特定の範囲を描画させなくすることができる。この機能を「クリッピング」といい、その範囲を「クリッピング領域」という。
 「特定の範囲」は、 GDI のひとつであるパスリージョンを用いて指定し、 SelectClipRgn() 等の API でクリッピング領域としてデバイスコンテキストに結びつける。 MFC の場合には CDC::SelectClipRgn() 等のメンバ関数を使用する。
 ゲーム等でも、描画速度を速めるためなどの目的でクリッピングが行われるが、その場合には DirectX の機能を使用する。
 
 
クリティカルセクション( Critical Section )
  「重要な部分」
 マルチスレッドやマルチプロセスで使用する同期オブジェクトのひとつ。
 他の同期オブジェクトと違い、クリティカルセクションオブジェクトそのものはフラグとして機能しない。クリティカルセクションの目的は、実行コードの一部をロックし、たったひとつのスレッドのみが実行できるようにすることである。
 関数などで特定の変数へのアクセスを行う場合、その前後をクリティカルセクションで囲むことにより、たったひとつのスレッドのみがそのコードを実行できることになり、結果リソースへの同期が守られる。ミューテックスなどと違い、範囲の広いコードや複数の関数からアクセスされる変数などには使いにくいが、その分単純でデッドロックしにくいプログラムを作りやすいと言える。
 注意すべきなのは、この同期オブジェクトのみ、単一プロセス内でのみ使用できる。ミューテックスのように複数プロセスにまたがった同期は取れないので注意すること。
 
グループ ID
 ( Group ID )
 複数のユーザー ID をまとめたものに付けられる ID 。
 複数のユーザーをまとめて「集団」とし、その集団に対してセキュリティ等の設定を行う場合に使用する。
 
クロージャー
 ( Closure )
 「閉包」
 広義には「閉じるもの」もしくは「閉じたもの」。
 オブジェクト指向プログラミングでは、オブジェクトメソッドひとまとめにしたオブジェクトを指す。 C++ 言語風に表現するなら、あるクラスへのポインタと、そのクラスが持つメンバ関数へのポインタをセットにして持ち、普通に(非メンバ関数的に)関数として呼び出すことができるような変数、ということになる。
 他言語には備えているものも多いが、 C++ には備わっていないため、必要とするならクラスとして同様な機能を持つものを作ることになる。
 
グローバル( Global )
 「大域 / 広域」
 ソースファイルもしくはプログラム全体のどこからでもアクセスできる変数、関数のこと。
 変数などに対してアクセスできる範囲をスコープという。この範囲がソースファイル全体、もしくはそれ以上に及ぶものを「グローバルなんとか」と呼ぶ。変数の場合には「グローバル変数」と呼ぶ。
 範囲がソースファイル内か、それ以上に及ぶかはリンケージによって決定される。ソースファイル内に限定される場合には「ファイルスコープを持つ」と呼ばれる場合もある。
 グローバルでない場合をローカルであると言う。またメンバ関数およびメンバ変数クラススコープという別の範囲を持つ。
 グローバルな変数は、中カッコ{ ... } )に囲まれていない位置で宣言することで作成できる。ただし、一般的にグローバル変数は作成してはいけない。作る場合には関数と static 変数を組み合わせ、その参照を返す形で作成するのが望ましい。
 関数は通常グローバルなものであり、どこからでも呼び出せる。
 これとは別に、ウィンドウズにはグローバルリソースというものがある。これは、プロセス間で共有できるという点で「グローバル」である。
 
グローバルリソース ( Global Resource )
 「ウィンドウズ全体資源」
 あらゆる存在からアクセスされ使用されるリソース
 一般にはウィンドウズオブジェクトそのものを指す。ウィンドウズオブジェクトは各プロセスからアクセスできるため、管理に関して注意する必要がある。
 
 
継承
 ( Inheritance )
 <けいしょう>
 あるすでに存在するオブジェクトを元に、機能を追加した新しいオブジェクトを作成する、オブジェクト指向プログラミング言語の機能。
 オブジェクトを細かく作っていくと、似たような物が多数出ることがある。例えば「人」というオブジェクトがあれば、「男」と「女」や、「大人」と「子供」や、「上司」と「部下」といった、一部のプロパティメソッドのみが違うオブジェクトが多く存在することになる。
 こういったときに役立つのが「継承」である。「継承」とは、あるオブジェクト(継承元)のプロパティやメソッドを別のオブジェクト(継承先)でまるごと使えるようにしてしまう機能である。
 重要なのは、これは決してコピーするわけではないということである。継承先を作製した後で継承元を変更したとしても、その変更は継承先へも受け継がれる。これによって、コードの肥大化によるバグやファイルサイズの増大を防ぐことができるということになる。
 ただし、機能を増やすだけの安易な継承は控えるべき。あまりにも多くの機能を持つクラスは複雑化し問題が発生しやすい。 is-a 関係であるかどうか、 集約の方が適当ではないか等考慮してから継承すべきである。
 
言語処理
 ( Language Processing )
 特定の文字列を「何らかの言語で記述されている」と見なし、それを解読すること。
 通常字句解析構文解析意味解析等を行う。
 コンパイラがプログラムを解読することも言語処理のひとつである。
 
検索 ( Retrieve )
 特定のデータを探すこと。
 サーチクエリーとほぼ同じ意味。
 プログラミングにおいては、ふたつの点で重要となる。
 ひとつは「速度」。膨大な量の中から見つけだす場合、どれだけ早く見つけられるかが重要となる。
 もうひとつは「引っかかりやすさ」。英語と違い日本語は、単語ごとの区分を見分けることが容易でない。そのため、どれだけの許容範囲で「一致」とみなすのかが大きな問題となる。範囲が狭ければまったく見つからず、大きすぎれば大量に見つかってしまう。
 インターネットによって「元のデータ」が非常に膨大となった今、検索技術は非常に重要な分野だと言える。
 
子 ( Son / Daughter )
 主に派生クラスのことを指す。
 
子ウィンドウ ( Child Window )
 ウィンドウ属性のひとつ。
 ウィンドウは他のウィンドウを親ウィンドウとして持つことができる。親ウィンドウを持つウィンドウを子ウィンドウという。
 子ウィンドウは親ウィンドウの後ろに回ることはない。また、通知メッセージなど、一部のメッセージは子ウィンドウではなく親ウィンドウに送られることでウィンドウ管理を楽に行うことができる。
 
更新 ( Update )
 「最新状態に」
 古い状態を新しい状態にすること。
 主に画面上での描画の更新を意味する。データを表示する場合、そのデータが変更された時にビューも更新する。
 特定のウィンドウに更新するよう知らせるには、 API の場合 InvalidateRect() を使用する。 MFC の場合、 CDocument::UpdateAllViews() 等を呼び出すことで行われる。
 ただし、この時点では再描画は行われない。これは、頻繁に再描画を行った場合、処理が重くなる可能性があるからである。更新した後、再描画を行いたい場合には UpdateWindow() 等を呼び出す必要がある。
 
 
構造化例外処理
 ( Structured Exception Handling : SEH )
 ウィンドウズがシステムとして持っている例外処理。ほぼ同じ機能を C++ 言語の例外処理でも拾える上、構造化例外処理は「デストラクタが呼ばれない」という C++ では致命的な弱点を持っている。そのため C++ プログラミングでは使用すべきではない。
 
 
構造体
 ( Structure )
 C 言語では「変数を持つユーザー定義」。プログラマーが作れる型で、いくつかの変数を持たせることができる。 struct というキーワードで定義できる。
 C++ 言語では「アクセス制御のデフォルトが public のクラス」。通常のクラスは private 。この違いのみ。
 
構文解析
 ( Syntactic Analyze / Parsing )
 「単語木構成」
 単語の並びを優先順位順に構成すること。
 文字列解析を行う場合、まず字句解析を行い、それによって「トークンの集まり」となったものを今度は「優先順位」に従って構成を行う。これを「構文解析」と言う。
 たとえばコンパイラコンパイルを行うときに「z = ++x * --y;」というプログラムに対して「 ( z = ( ( ++x ) * ( --y ) ) )」と「処理の順番付け」を行う。これが「構文解析」である。これにより、文の「構成」を把握することができる。この構成は「トークンを葉に持つ木構造」となる。
 構文解析を行うためには、そのための「ルール」が必要となる。コンパイラが使用する「 C 言語のルール」では「 ++ は * よりも優先順位が高い」「 = は右オペランドを先に評価する」などの取り決めが成されており、構文解析はこのルールを元に行われている。
 構文解析の方法には「 LL 構文解析」、「 LR 構文解析」、「 LALR 構文解析」などがある。
 「文字列解読」を行う場合、構文解析の後に意味解析を行う。
 
コード
 ( Code )
 「信号 / 符号 / 暗号 / 記号 / プログラム」
 広義には、なんらかのものを符号化したもの。
 たとえば文字コードは「実際の文字を整数値に置き換えたもの」である。
 一般には「プログラム」そのものを指す場合が多い。中でも特に実装のみを指すことが多く、プログラムの構造については指さない場合が多い。このため、プログラムの実装部を書くことを「コーディング」と呼ぶ。
 また、場合によってはコンパイル後の機械語としてのプログラムを指すこともある。
 本来、コンピューターそのものが「実際に存在する物の符号化」により成り立っているため、コードという概念はあらゆる場面に存在する。
 
コードウォーリアー
 ( CodeWarrior )
 統合開発環境のひとつ。
 メトロワークス社製の開発環境。ウィンドウズ用はもちろん、マックやプレイステーション、 Palm など様々な OS をターゲットとした開発を行うことができる(ただしそれぞれ別の製品)。 Visual C++ はウィンドウズに特化されているため、それでは困る開発者に重宝されている。
 ちなみに本辞書は Visual C++ 中心なのでコードウォーリアーに特化した単語は掲載しない予定です。ごめんなさい。
 
コールバック関数
 ( Call Back )
 「折り返し呼び出し」
  OS から呼び出される関数
 通常何らかの方法で OS に登録する。登録時には関数へのポインタを渡す。登録する関数はすでに戻り値引数が決まっているため、それにあわせて関数を作成する。関数名はプレースホルダーであり好きに付けていい。ウィンドウプロシージャもそのひとつ。その他、フック用の関数もコールバック関数。いくつかのエラー処理関数も含まれる。
 ウィンドウズ用のコールバック関数には CALLBACK WINAPI を付ける決まりになっている。これらは呼び出し規約を指定するキーワードで、これがないと呼び出し側はどう関数を呼び出せばいいのか分からないためである。
 
コネクション ( Connection )
 「接続点」
 何かが何かに対して「接続する」こと。もしくはその接点。
 「何か」は場合によって異なるが、通常は「大きいものに小さいものが接続する」ことを指し、接続点を通してデータのやりとりを行う。
 
コネクションポイント ( Connection Point )
 「接続点」
  COM における、 COM コンポーネントから他の COM コンポーネント内のメソッドを呼ぶためのシステム
 このシステムを使用することで、あるコンポーネントから、別のコンポーネントのメソッドを呼び出すことができる。これらのうち、「呼び出す側」を「ソース」、「呼び出される側」を「シンク」と呼ぶ。
 
コネクションレス
 ( Connectionless )
 「接続要らず」
 ネットワークを使用してデータを送受信する場合に、通信相手のコンピューターと「接続」せずに送受信を行うこと。 UDP が使用する方法。
 TCP などのコネクションベースのプロトコルでは、通信相手と「接続」することで、その接続相手とのみデータの送受信を行う。送信したデータは送信した順番に正確に送られる。
 対照的に、コネクションレスな通信では好きな時に好きな相手に対して好きなタイミングにデータの送受信を行うことができる。しかしその分、受け取る側は「複数の相手からバラバラに送られてくる」ことになるためその確認を行う必要がある。
 
 
コピーコンストラクタ( Copy Constructor )
 コンストラクタの一種。「const 自分参照」を引数に持ち、自分と同じ型を初期化時に渡されたときに呼び出される。
 「特殊コンストラクタ」に含まれ、プログラマが作成しなくてもコンパイラが勝手にコードを作成し、「すべてのメンバをコピーする」という機能を持たせる。構造体での初期化を考えれば分かりやすいだろう。
 
コミット
 ( Commit )
 「確定」
 主にみっつの意味がある。
 「確定書き込み」:ディスク上にデータを書き込むことを「コミットする」と言う。データベースの用語として主に使用される。処理途中でのエラーによって中途半端な書き込みが行われることはない、という意味で「コミット」という単語が使用される。また、一度書き込まれた内容は書き込み前に戻ることはない、という意味でも使用される。
 「メモリの確保」:予約(リザーブ)しているメモリを、使用できる状態にすることを「メモリをコミットする」と表現する。なんとか Alloc 系を用いて動的にメモリを割り当てを行う場合にこの単語がよく使用される。
 「明言する」:何かを明言すること。プレスリリースのように、何らかの効力を持つ場合が多い。基本的にはプログラミングと関係ないが、資料などにはこの単語が使用されている場合がある。
 
ごみ箱 ( Recycle Bin )
 特殊フォルダのひとつ。
  desktop.ini を持ちシェル拡張によって特殊化され、レジストリに登録されている。
 ファイルフォルダをこのフォルダにドロップすることで「削除」することができる。この削除は仮のもので、復元することができる。ごみ箱を「空」にすると、完全に削除する。このときは復元することができない。
 このフォルダのフルパス ::SHGetSpecialFolderPath( ) の第3引数 CSIDL_BITBUCKET を渡すことで得られる。
 
コモンコントロール ( Common Control )
 「共通ユーザーインターフェイス」
 エディットボックスなど、ウィンドウズの標準ユーザーインターフェイス
 そのほとんどはダイアログに置くためのダイアログボックスコントロールである。ダイアログに置かないものはツールバーなど少数。基本的な仕組み(ウィンドウのひとつであることなど)はダイアログボックスコントロールと同じなのでそちらを参照のこと。
 
コレクション( Collection )
 「収集」
 特定のの複数の変数をひとつにまとめて管理するもの。
 C++ 言語に組み込まれている配列は、動的にサイズを変更できないことや、要素インデックスかポインタでしかアクセスできないというデメリットがある。これらの問題点を克服した、いわば「配列の進化型」がコレクションである。
 通常クラスを用いて実現する。プログラマー独自のクラスなどを格納する場合にはクラステンプレートを用いて実現されたものを使用する。
 コレクションには、配列のように機能するものだけでなく、要素インデックスを持たない「リスト構造」や、要素インデックスが自由な「辞書」など、様々なタイプがある。
 よく使われるコレクションクラスには、 MFC CArray CList STL std::vector std::list がある( STL のものはコンテナと呼ばれている)。これらはすべてクラステンプレートを用いているため、格納する型を決めることができる。また、MFCには格納する型が固定されている CString などのクラスも用意されている。
 
コンカレンシモデル ( Concurrency Model )
 「同時発生モデル」
 同時処理を行うことを想定して設計を行うこと。「同時処理」とは一般にはマルチスレッド環境を指す。
 
コンストラクタ( Constructor )
 「建設者」
 クラス 変数が作成されたときに自動的にに呼び出されるメンバ関数
 戻り値のない、クラス名と同名の関数は「コンストラクタ」と呼ばれ、変数が作成されたときにまず呼び出される。主にメンバ変数継承元の初期化を行うために作成する。
 コンストラクタは、別に必要でなければ作成する必要はない。しかし、 const メンバ変数の使用や「クラスの性質」を持たせるためなど、作成するメリットは多い。ある意味、コンストラクタを理解することが「 C++ 言語のクラス」を理解することに継ながると言える。
 コンストラクタにはコピーコンストラクタという特別なコンストラクタも存在する。
 
コンソール / DOS 窓 / MS-DOS プロンプト ( Console )
 「制御台」
  文字列 の入出力のみについて、アプリケーションとユーザーとを継なげるウィンドウ
  CUI アプリケーションは、標準入出力を介して文字のみの入出力を行う。そういったアプリケーションを使用するには、実際に文字を入力し、結果を出力するウィンドウが「コンソール」である。
 Win9x では以前の MS-DOS の機能を引き継いでいるため「 DOS 窓」と呼ばれることが多い。 WinNT では引き継いでいないため「コンソール」と呼ばれることが多い。
 
コンソールバッファ ( Console Buffer )
 「文字列貯蔵庫」
 コンソール文字列を蓄えるためのバッファ
 コンソールを経由して入力された文字列は、メモリ領域に蓄えられるこの領域がコンソールバッファである。コンソールから入力された文字列を取得する場合には、このバッファにアクセスする必要がある。読み取るには API ReadConsole() 等を使用する。もちろん、このようなことは行わずに標準入出力を使用した方が簡単である。
 
コンテキスト ( Context )
 「文脈」
 一般には、それまでの「状況」を指す広い意味の単語。
 たとえばコンテキストメニューは、どこをクリックするか等の「状況」によってメニューの内容が変わる。
 狭義には、スレッドそのものについての情報を指す。
 ウィンドウズのようなプリエンプション機能を持つ OS は、一定時間ごとに実行するスレッドを変更する。そのため、各スレッドそのもののアドレス等を保存しておく必要がある。この情報を「コンテキスト」と呼ぶ。
 
コンテキストメニュー ( Context Menu )
 「状況メニュー」
 いわゆる「クリックメニュー」のこと。
 適当なところで右クリックすると、たいがいメニューが表示される。通常、クリックした場所や選択された領域などによってメニューの中身が変わる。つまり「その場の状況」によってメニューの内容が変わるため「コンテキストメニュー」と呼ばれる。
 
 
コンテナ( Container )「容器」
 主にふたつの意味がある。
 ひとつはOLEにおける他のアプリケーションを取り込むアプリケーションのこと。
 OLEでは複数のアプリケーションを組み合わせることができる。たとえば「ワープロ」に「ドロー」を入れるような形で、一方にもう一方を含ませるさせることができる。この「囲む側」(この場合ではワープロ)を「コンテナ」と呼ぶ。しばしば「クライアント」とも。また「囲まれる側」をサーバーという。
 もうひとつは STL std::vector などコレクションと同意。
 
コンパイラ( Compiler )「翻訳者」
 コンパイルをする実行ファイル
  Visual C++ では、C++言語のコンパイルは CL.exe という実行ファイルが行う。
 また、 gcc など「コンパイラ=開発環境」の場合もある。
 最近は IDL などの言語もコンパイルする必要があり、それぞれの言語ごとにコンパイラが用意されている。たとえば Visual C++ では IDL のコンパイルを MIDL が行っている。
 
 
コンパイル( Compile )「編集」
 C++ 言語等で書かれたコード機械語に翻訳すること。
 翻訳されたあとのファイルは「中間ファイル」と呼ばれる。 Visual C++ ではこれを「オブジェクトファイル(拡張子 .obj )」と呼んでいる。
 コンパイルを行うアプリケーションをコンパイラと呼ぶ。
 最近は IDL などの言語もコンパイルする必要があり、それぞれ別々にコンパイルする必要がある。
 
コンパイルタイム( Compile Time )
 「コンパイル時」
 「コンパイル するときに」という意味。通常ランタイムと比較する場合に使われる。
 たとえば、「異なるで代入をしようとした」ときは、コンパイルしたときに error C2440 というエラーが発生する。対照的に、「無効なポインタを使用しようとした」ときは、実行したときに「ページ違反」というエラーが発生する。この前者を「コンパイルタイムエラー」、後者を「ランタイムエラー」という。
 また、ポリモーフィズムにおいて、関数のオーバーロードを使用するものを「コンパイルタイムポリモーフィズム」、仮想関数を使用するものを「ランタイムポリモーフィズム」と呼ぶ場合がある(ただし通常「ポリモーフィズム」と言ったら後者を指す)。
 「コンパイルタイム」の場合、エラーも動作も決められたものだが、「ランタイム」の場合は、エラーも動作もその場その場で違うものとなる場合が多い。そのため、「コンパイルタイム」は予測が付き、安全だが、融通が利かない。また「ランタイム」はフレキシブルで自由度が高いが、何が起こるか分からず対処しきれない可能性がある。
 実際にはこのふたつをうまく組み合わせていくことになるが、「安定性を重視する」のであれば当然「コンパイルタイム」寄りとなるだろう。
 
コンパウンド
 ( Compound )
 「複合体 / 複文」
 広義には、複数の要素から成り立っているものを指す。
 C 言語では { } で囲んだ区間を指す。一般にこれはネストと呼ばれる。
 
コンポーネント( Component )
 「構成要素」
 広義には「プログラムを構成する部品」。この場合にはクラスも含まれる。
 通常は「隠蔽化され外から見えない部品」を意味する。DLLCOMを指す場合が多い。プログラムの一部を分け隠蔽化し「部品」とすることで、他のプログラムとの依存度が少ない独立したパーツとなり、取り外しや使い回しが楽になる。隠蔽するものはたいがいクラスであり、結果コンポーネントはクラスもしくはオブジェクトとしての機能する。特定のクラスをコンポーネントに封じ込めることを「コンポーネント化する」という。
 狭義としてはCOMもしくはCOMインターフェイスを指す。
 
 
コンポジション ( Composition )
 オブジェクト指向プログラミングにおける専門用語のひとつ。
 「関連」の一種。あるクラスが他のクラスをプロパティとして直接的に持つこと(C++の場合。 Java では参照として持つ)。
 こうすることでひとつのクラスであるかのように機能し、継承とは違う方法で「ひとつのクラスにふたつのクラスの機能を組み合わせる」ことができる。通常、コンポジションされるクラスはランタイムに変えられない。
 
サーチ ( Search )
 「探査」
 特定のデータを探すこと。
 たとえばインターネット上で特定の文字列を探すためのサイトを「サーチエンジン」と呼ぶ。
 検索とほぼ同意語。
 
 
サーバー( Server )「奉仕人」
 OLEにおける他のアプリケーションを取り込まれるアプリケーションのこと。
 OLEでは複数のアプリケーションを組み合わせることができる。たとえば「ワープロ」に「ドロー」を入れるような形で、一方にもう一方を含ませることができる。この「囲まれる側」(この場合ではドロー)を「サーバー」と呼ぶ。また「囲む側」を「コンテナ」と呼ぶ。アプリケーションの中には「サーバー」と「コンテナ」の両方の機能を持つものもある。
 また、「サーバー」という単語はネットワーク上では別の意味となる。ネットワーク上ではメールやHTMLファイルなどを提供するコンピューターやアプリケーションを「サーバー」と呼ぶ。この場合、サーバーから「データを取り出す側」を「クライアント」と呼ぶ。
 どちらにしろ、「サーバー」は「求められたらそれに応えて提供する」というものになる。
 
サービス ( Service )
  Windows NT / 2000 における常駐アプリケーション
 通常のアプリケーションは、 Windows NT / 2000 ではログオンしてから実行される。しかしサービスは Windows NT / 2000 OS そのものが起動した時点で実行され、ログオンの状況に関わらず常駐する。
 サービスはログオンした各ユーザー間を仲介したり、ネットワークの外からのアクセスに対応する。このように、サービスは「縁の下の力持ち」として活躍する。
 一般のサーバーはサービスとして実行される。
 
サービスパック ( Service Pack / SP )
 「マイナーアップグレード」
  Microsoft 社の製品をマイナーアップグレードするためのソフト。通常は DLL を更新する。
 マイクロソフト社は、自社製品に不具合が見つかった場合、「サービスパック」という、その不具合を解消するためのソフトを配布する。このソフトをインストールすることで、通常不具合は解消される。
 ただし、実装方法等が変わることで新たな不具合が生まれる場合があったり、また新機能が追加されることで「違う種類のウィンドウズ」となる場合もあるため、サービスパックのインストールには注意が必要。
 
再帰呼び出し ( Recursive Call / Recursion )
 ある関数自分自身を呼び出すこと。
 特定の処理を繰り返し行う場合に、処理を行う関数の中から、再び同じ関数を呼び出すことを「再帰呼び出し」と言う。無限ループとならないよう、特定の条件で return して関数から抜けるようにする。
 再帰呼び出しを行うプログラムを組むことで、無駄な関数を省き、プログラムをシンプルにすることができる。その反面、プログラムの構造が複雑となり、可読性や保守性が低下する可能性がある。
 
再定義
 ( Redefine )
 「名称」と「実体」が分かれているものに対して、「名称」は同じままで「実体」を変更すること。
 たとえば、 #define MAX_DATA 100 と定義されていたとする。これを #undef し再び #define を用いて MAX_DATA 200 とすることができる。これを「 MAX_DATA の値を再定義した」と言う。
 また、オーバーロードオーバーライドを行うことも「再定義」と呼ぶ場合がある。
 
再帰下降解析
 ( Recursion Top Down Parsing )
 「上から下へ連続解析」
 下降解析の方法のひとつ。大きな木を「小さな木の集まり」とみなして処理する方法。
 下降解析を行うプログラムを組む場合、全体の大きさ等が問題になる。そこで、関数は「ひとつの節に継ながる枝のみを解析」するよう組み、枝に再び節が見つかったらその節に対してその関数を呼び出すという方法を取る。これを「再帰下降解析」と言う。
 再帰呼び出しを行うことで処理するためこの名称が付いている。
 
最適化( Optimize )
 無駄をなくすこと。
 通常コンパイラのスイッチを変更することで行う。C++ 言語コードはコンパイラによって機械語のコードへと翻訳されるが、通常そこには無駄が存在する。スイッチを変えることで、その無駄が削り取られる。通常スイッチは「プロジェクト」−「設定」ダイアログの「 C/C++ 」−「最適化」ページで変更する。無駄が削ぎ落とされることで、実行ファイルのサイズが小さくなったり、動作速度が速くなる場合がある。
 だが、場合によっては「必要な無駄」まで削ぎ落としてしまい、バグとなる場合があるので注意。実際には、アルゴリズムの見直しやマクロの廃止などで大幅に向上できる場合が多いため、安易な最適化よりもまず自分のプログラムを見直すことをお奨めする。
 
再配布( Redistribute )
 他から提供されたファイル再び配布すること。ファイルとは主に DLL のことを指す。
 他のベンダーが作成したファイルを使用させてもらう場合には、そのファイルのライセンスを調べ、再配布が許されているかどうか、許されているのなら無料かどうかを確認する必要がある。たとえば MFC42.dll は許されているが、 MFC42d.dll は許されていない。
 許されていない場合には、添付せず、「自分で入手してください」と書き添えるしかない。ただし、インストールされているアプリケーションによってはすでにそのファイルがある場合もあるので、こういう方法も(難はあるが)可能だろう。
 
再描画 ( ReDraw )
 ウィンドウに描画する場合、「直接描く」というよりも「再描画に備える」という形式となる。
 ウィンドウのサイズ変更やアクティブ化による「見えている部分の変更」が行われると、「再描画」するよう WM_PAINT というメッセージが送られてくる。ウィンドウへの描画は、このとき BeginPaint() EndPaint() という API を使用して得られるデバイスコンテキストを介して行う。
  MFC の場合には CView::OnDraw() というメッセージハンドラが呼ばれる。このとき渡されるデバイスコンテキストを介して行う。
 この「再描画」は頻繁に行われるため、この再描画時に望むグラフィックが表示されるようにするといい。ただしゲームなどの場合は別。また、再描画する度に実際に描画を行うとボトルネックとなることが多いので、その場合にはメモリデバイスコンテキストを使用するといい。
 
サスペンド ( Suspend )
 「一時停止」
 スレッドの進行を一時的に停止すること。
 スレッドの進行、つまりプログラムの実行を一時停止させることを「サスペンド」と言う。マルチスレッド時に同期を取るため「一時停止」するときや、何らかの処理を終えてからスレッドをスタートさせたいときなどに使用する。
 サスペンドは、 API なら SuspendThread() を使用する。 MFC であれば、 CWinThread クラス SuspendThread() メンバ関数を使用する。
 
サチュレーション ( Saturation )
 「飽和 / 彩度」
 主にふたつの意味がある。
 「飽和」あるデータが限界値を超えること。限界値は場合によって異なる。
 数値計算等では飽和はあってはならないよう設計する必要がある。画像処理など飽和が頻繁に発生する場合には、飽和した値を限界値に置き換える処理が必要となる。 CPU の中にはこの「限界値への置き換え」を行う命令を持つものもあり、画像処理等の高速化に役立つ。
 「彩度」画像処理における、色を決定するためのパラメーターのひとつ。一般に使われるRGBやCMYKと違う、HSVという色決定法で用いられる。彩度が高ければ高いほど、その色の鮮やかさが増す。
 
サフィックス ( Suffix )
 「接尾語」
 変数名や関数名、名の末尾に付ける文字
 例えば MFC CView から派生したクラスは、 CTreeView CListView などどれも View が末尾に付いている。この View のように末尾に付ける文字を「サフィックス」という。
 「先頭につける」ものをプレフィックスという。サフィックスはプレフィックスほど使われていない。
 
 
サブクラス
 ( Sub Class )
 「補クラス」
 主にふたつの意味がある。
 ひとつは、特定のクラスから継承した、派生クラスのこと。「基底クラスを補うためのクラス」といった感じだろうか。また、この基底クラスをスーパークラスと言う。
 もうひとつは、特定のウィンドウプロシージャに送られてくるメッセージを先に受け取るウィンドウプロシージャのこと。元々存在するウィンドウプロシージャへと送られてくるメッセージを横取りするため、ウィンドウプロシージャを入れ替えることができる。これをサブクラス化と呼ぶ。送られてきたメッセージは、通常、元々のウィンドウプロシージャへと送るため、これも「元々のウィンドウプロシージャを補う」という意味で使用されている。
 
サブセット
 ( Subset )
 「一部分」
 ある大きなものの一部分
 たとえば「 WinsockAPI のサブセットである」というふうに使用する。
 一般的に使用されるため、場合場合によってどのような意味か読み解く必要がある。
 サブセットに対し、「ある大きなもの」をスーパーセットと言う。
 
サンク( Thunk )
 「落ちて着地」
  DLL 関数を呼び出す「システム」。
 実行ファイルから DLL 内の関数が呼び出される場合、関数が置かれたアドレスを知らせる必要がある。この部分の整合性を取るシステムを「サンク」と呼ぶ。
 基本的には必要のない知識。最近では「 16bit DLL 32bit Exe から呼び出す」場合や「 DLL の自動遅延ロード」などに使用される。
 
参照( Reference )
 規制の厳しいポインタ
 基本的な機能はポインタと同じ。違う点として、 -> 参照演算子)などの特別な演算子を使用せずにメンバ等にアクセスできることや、 const ポインタとして扱われるため一度アドレスを格納すると変更できないことなど。
 これらの特徴により、参照は「すでに存在する変数の分身」のように振る舞う。ポインタが「アドレスを格納する変数」としての意味が強いこととは対照的。
 ポインタとの使い分けとして、参照は指し示す変数を変更できないためクラスの相互関係を変更できないようにする場合に使用する。また、参照は「 delete できない」という利点があるため、このことを明示したい場合にも使用する。また関数引数として構造体を渡すときなど、「アドレス」という概念を使用せずに変数を渡したい、もしくはデータを受け取りたい場合などに使用する。
 また、他の言語では話が違ってくる。多くの言語ではポインタと同様の機能を「参照」と呼ばれるものが行っているか、もしくは参照しか存在しない。たとえばDelphiではポインタを使うことができるが、関数の引数として使用する場合には通常ポインタを使わず参照を使用する。
 これらのようなごちゃ混ぜな状況もあって、「プログラミング」全体の用語として、実際の値を渡さず、値を格納する変数を指し示すものを引数に渡すことを「参照渡し」と呼ぶ。この場合実装方法については問われないことが多い。この辺の用語は分かりにくいので注意すること。
 ちなみにこれとは別に「この本を参照してください」というような普通の意味でも使われる場合があるため注意が必要。
 
参照演算子( -> )
 演算子のひとつ。
 ポインタが指し示す実変数のメンバ変数メンバ関数にアクセスする場合に使う。つまり非ポインタ変数の「 . (ピリオド)」の代わり。
 この演算子はオーバーロードできる。そのため、特定のクラスに概念として「参照」を行わせる場合に、この演算子のオーバーロード関数を持たせることが最近多い。
 たとえば、ラッパークラスはコンポジションのような形式で他のオブジェクトを「持つ」が、そのオブジェクトのメンバを呼び出すときに参照演算子を使用させ、ラッパークラス自体の操作にはピリオドを使わせるという設計を行っているものがある。例としてはいわゆる「スマートポインタ」と呼ばれる auto_ptr _com_ptr_t などがある。
 
参照カウント
 ( Reference Count )
 「使用者数」
 複数のプロセス等から共有されるオブジェクトが、現在何個から共有されているかを格納する整数値
 ロックカウントとほとんど同じ。ただし、ロックカウントが「排他処理」、つまり他の存在が邪魔しないようするために使用されないよう「ロックを掛ける」ことが多いのに対し、参照カウントはそういったことをせず、単に「削除できる状態」のみを取得するためのものとして機能することが多い。
 この仕組みはスマートポインタでよく使用される。スマートポインタと基本的に同じ仕組みである CString や std::string 等の文字列クラス、 COM インターフェイスなどに利用されている。
 
シーケンシャル( Sequential )
 「連続」
 何かを「立て続け」に行うこと。もしくは行える「構造」のこと。
 たとえば「配列を先頭から順にアクセスする」ことを「シーケンシャルアクセス」と言う。また言い換えれば「配列はシーケンシャルな構造となっている」とも表現できる。
 これとは別に「改行区切りのテキストファイル」という意味で使われる場合もあるため注意。
 
シーケンシャルアクセス ( Sequential Access )
 「順次アクセス」
 ファイルメモリ等に対して、読み書きを先頭から行う状態のこと、もしくはそれを行うこと。
 ファイル入出力を行うとき、ファイルの先頭から順次アクセスしていくことを「シーケンシャルアクセス」という。また、このモードで開かれたファイルを「シーケンシャルファイル」と呼ぶ。
 ファイルの中から目的のデータを探し出す場合や、ファイルの中のデータが可変長のため特定の場所を直接指定できない場合などに行われる。
 反対に「どこからでもアクセスできる状態」のことを「ランダムアクセス」という。
 
実行ファイル ( Execution File / Command File )
 拡張子が .exe ファイル
 機械語によって書かれたプログラムが格納されており、 OS がそのプログラムを読み取り実行する。場合によっては「コマンド」や「アプリケーション」とも呼ばれる。
 
シェル ( Shell )
 「貝殻」
  OS と使用者との仲介役となるアプリケーション
  CUI GUI 問わず、使用者からのマウスやキーボードによる入力を受け取り、 OS を通して各アプリケーションへと渡し、その結果を OS 通してディスプレイファイルへと出力する、そういった処理を行うアプリケーションを「シェル」という。
 ウィンドウズではほぼ完全に OS と融合してしまっているため、区別は付きにくい。にも関わらずシェル拡張というシェルの機能を増補するための方法が用意されている。
 
 
シェル拡張 / シェルエクステンション( Shell Extension )
 「シェル」とは「貝殻」の意味であり、コンピューターではOS を包むもの」を意味する。ウィンドウズにおいては特にファイル関係の拡張機能を意味する。
 いかにウィンドウズと言えども、ファイルシステムは MS-DOS のものがベースとなっている。ルートにドライブが存在し、そこからディレクトリファイルがツリー上に連なっている。
 シェル拡張は、このファイルシステムをユーザーから隠蔽し、おなじみの「デスクトップ」をルートにして仮想的なファイルシステムを構築している。
 シェル拡張を操作・変更する場合にはCOMを使う必要がある。逆に言えば、これを通さない場合には、旧態然としたファイルシステムが見える。そして、「エクスプローラー」はCOMを利用してファイルシステムを表示しているということに注意。
 一見、シェル拡張は「がっちりとしたシステム」に見えるが、決してそうではない。「単なる見せかけ」ということに気付けば、シェル拡張について一歩進んだ見方ができるようになるだろう。
 
ジオメトリ ( Geometry )
 「幾何学」
 主にふたつの意味がある。
 ひとつは「 3DCG における移動・変換処理」としての意味。
  3DCG におけるポリゴンデータは、位置や形状を数値として持っている。この位置や形状を変更するために、数値をまとめて処理する方法を「ジオメトリ」という。
 もうひとつは「ハードディスクのセクタ数」という意味。この値を使用してディスクに対するアクセスを行う。
 
識別子 / シンボル
 ( Identifier )
 「ユーザー定義単語」
 プログラミング中の、キーワードを除く単語
 変数、関数等を表す「単語」を「識別子」という。ただしキーワードは識別子に含まない。つまり、識別子とは「ユーザーが作った単語」を指す。
 外部シンボルのエラーなどでこの単語がよく使用される。
 
字句解析
 ( Lexical Analyze )
 「単語分割」
 文字列単語に分解すること。
 基本的に文字は単なる整数値でしかなく、コンピューターにとっては区別しにくいものである。プログラムとしてこの「区別」を行い、文字列を「単語の並び」として解釈することを字句解析という。字句解析において、「単語」は「トークン」と呼ばれる。
 たとえばコンパイラコンパイルを行うときに「int i=100;」というプログラムを「 int 」「 i 」「 = 」「 100 」「 ; 」などの各トークンに分解する。これが「字句解析」である。
 字句解析を行うためには、そのための「ルール」が必要となる。コンパイラが使用する「 C 言語のルール」では「スペース・タブ・改行はトークンの区切り」「トークンに英数と演算子が混ざることはない」などの取り決めが成されており、字句解析はこのルールを元に行われている。
 「文字列解読」を行う場合、字句解析の次に構文解析を行う。
 
シグナル ( Signal )
 「合図・知らせ・信号」
 広義には「何かが起きた時に送られてくるフラグ」を意味する。この場合には、エラー処理や割り込みなど、様々な場合が当てはまる。
 ウィンドウズでは WaitForSingleObject() API で使用する OS 内部のフラグを指す場合が多い。
 スレッド同期オブジェクトなど一部のウィンドウズオブジェクトは、特定の場合(スレッドなら終了時、ミューテックスならスレッドに所属していない時)に「シグナル状態」となる。 WaitForSingleObject() API に、シグナル状態になりうるウィンドウズオブジェクトのハンドルを渡して呼び出すと、シグナル状態になった時に WaitForSingleObject() API から帰ってくる。この仕組みを利用することで、スレッドの実行を一時中断させておき、シグナルを「シグナル状態」にすることで再びスタートさせる、といったことができる。
 
辞書
 ( Dictionary )
 データ構造のひとつ。ふたつで一組の要素を複数格納するもの。連想配列とほぼ同じ。
 「一組の要素」は「キー」と「」から構成される。これらはたとえば「商品名」と「値段」のように対となるものである。「辞書」はこの一組の要素を配列のように複数持つものである。通常はキーを元に値を検索することができる。
 C++ 言語には辞書にあたるものは初めから組み込まれていない。 MFC CMap や、 STL std::map 等が辞書として使用できるクラスである。
 
システム
 ( System )
 「機構」
 非常にあいまいな単語。
 一般には「何かを処理する組織だった装置」を指す。例えば在庫管理など。システムエンジニアはこういった「システム」を作成することになる。
 本辞書では、「システム」という単語は「仕組み」に置き換えられる場合が多い。また「ウィンドウズシステム」は「ウィンドウズだけの特別な仕組み」とでも読み替えてもらえれば助かる。
 
実引数
 ( Argument / Actual Argument )
 <じつひきすう>
 関数を呼び出すときに渡す値もしくは変数。
 ある関数 void Func( int x ) がある場合に、この関数を Func( iData ) と呼び出せば、 iData が「実引数」となる。
 実引数は、一般に「引数」と呼ぶものとは別物と考えた方がいいだろう。「実引数」という単語は主に仮引数と対比する場合に使用される。実引数という言葉自体、最近ではあまり使われていない。
 
シフト
 ( Shift )
 「横にずらす」
 広義には、何かを横にずらすこと。実際には横とは限らないが、横のことが多い。
 狭義としては、主に3つの意味がある。
 「ビットシフト」:変数を「ビットの列」と見なし、そのビットを横にずらすこと。 >> および << 演算子を用いて行う。
 「シフトキー」:キーボードの左右端にある「 △Shift 」と書かれたキー。このキーを押しつつ他のキーを押すことで、「ひとつ上の文字」を入力できる。たとえばシフトキーを押しつつ「 1 」を押せば、上に書いてある「 ! 」が入力される。
 「シフト JIS」:文字コードのひとつ。ウィンドウズで使用されている文字コード。 JIS 文字コードから変換するときに「ビットシフト」を使用することからこの名称が付いている。
 
シャットダウン
 ( Shutdown )
 「一時休業」
 OS を終了させ、パソコンの電源を切れる状態にすること。
 Windows NT や UNIX のような「複数人数で使用する OS 」の場合、電源を入れっぱなしにしておき、あまり電源を切らないようにすることが多い。電源を切ることで、ネットワーク上の他のコンピューターからアクセスできないなどの支障がでるためである。そのため、電源を切ることができる状態にするためには専用の操作が必要となる。それが「シャットダウン」である。
 
修飾子
 ( Modifier )
 「付加単語」
 何らかの機能を加えるために付け加える単語
 基本的にはあってもなくても良いが、何らかの機能を実現するために付け加えられる単語。たとえば __cdecl 等の呼び出し規約は、関数に付ける修飾子である。単純に関数を使用する分には呼び出し規約を決める必要はないが、コールバックの機能を付加したい場合には __stdcall 等を付けることになる。こういった「機能の付加」が修飾子の目的である。
 
終端記号 ( Terminal Symbol )
 「一意な単語」
 意味が一意に決定される単語
 基本的には「正規構文」の用語だが、正規構文を用いて文解釈を行うコンパイラの用語としても使用される。
 「プログラムをコンパイルする」とは、コンパイラがプログラムを読み解くことを意味する。特定の構文規則(これが C++ 言語等にあたる)にのっとりプログラムを解釈し理解する。このとき、各文や各単語は「一意に意味が決定する単語」と「他の単語の別名になっている単語」の2種類に分かれる。前者は const などのキーワード、後者は typedef された型などである。
 このうち、前者、 const のような「一意に意味が決定する単語」を「終端記号」と呼ぶ。コンパイラはこの単語を見たとき即座に「 const である」と決定することができる。他の単語に置き換える余地がない、という点で「終端」である。
 プログラムをコンパイルするためには、全ての単語が終端記号に置き換えられなければならない。単語のうち「意味が分かるもの」は、終端記号に限られるからである。
 ちなみに「別名かもしれない単語」を「非終端記号」と呼ぶ。
 
終端文字 / NULL 文字
 ( NULL Terminator / \0 )
 文字列終わりを示す文字エスケープシーケンスのひとつ。
 一般に、文字列は配列などを利用した「直線上に並ぶメモリ領域」に置かれる。そのため、目印がないと「どこまでが文字列なのか」判別することができない。その「目印」が「終端文字」である。
 終端文字は \0 という文字で表される。この文字は整数値としては0である。リテラル文字列を使用した場合には自動的に追加される。
 一般に終端文字が「 NULL 文字」とも呼ばれるのは、ともに値が0であるからというだけであり、ポインタ NULL とはまったくの別物と考えるべきである。
 
 
集約 ( Aggregation )
 オブジェクト指向プログラミングにおける専門用語のひとつ。
 「関連」の一種。あるクラスが他のクラスへのポインタ参照を持ち、ひとつのクラスであるかのように機能すること。
 こうすることで、継承とは違う方法で「ひとつのクラスにふたつのクラスの機能を組み合わせる」ことができる。また、集約先のクラスにポリモーフィズムを用いることで、ランタイムに自由な組み合わせを実現することができる。
 これより強い結びつきをコンポジションという。
 
上昇解析
 ( Bottom Up Parsing )
 「下から上へ解析 / 末端的解析」
 木構造下(葉)から解析していく方法。まず部分部分から解析していき、最終的に全体を解析することになる。
 「上から下へ解析する」方法を下降解析と言う。
 
状態遷移図
 ( State Transition Diagram )
 オートマトンを記述する
 特定の入力に対してプログラム内の内部状態が変化し、特定の出力を出すものを「オートマトン」という。この「内部状態」を図にしたものを「状態遷移図」と言う。
 通常、状態遷移図には状態を丸で書き込み、丸の中に状態名を書く。各状態の移動は矢印で表し、矢印の脇には「その移動を行わせる入力」を書き込む。出力に関しては場合によってどこに書き込むかが変わってくる。たとえば有限状態オートマトンであれば出力は0か1であるため、「1を出力する状態を二重丸にする」などで表す。
 状態遷移図を書くことでオートマトンを表すことができる。また、無駄を省くための処理等もしやすい。大規模なプログラムでも、部分部分ではオートマトン的処理が必要なことがあるため、その概略図として使用すると分かりやすくなる。
 
冗長
 ( Verbosity )
 <じょうちょう>
 余分な部分。
 本当に必要な部分に継ぎ足された、特に必要ない部分を「冗長な部分」と言う。たとえば 00001234 という値があった場合、最初の4桁の 0000 がなくても値を知ることができるため、この最初の4桁は「冗長な部分」であると言える。
 多くの場合、「冗長」という単語は「不必要で無駄な部分」という意味で使用される。先の 0000 の例がこれにあたる。
 ただし、「特に必要ないがあった方がいいもの」という場合もある。たとえばバックアップデータはオリジナルのコピーであるため無駄な存在だが、オリジナルが破損した場合には重要な復元元となる。このように冗長性を持つことが意味を持つ場合もある。
 
ショートカット
 ( Shell Link )
 「リンクファイル」
 特定のファイルを指し示すファイル
 よくデスクトップ等に置かれる、他のファイルを指し示すファイル。ダブルクリックすることで、指し示す先のファイルをダブルクリックしたときと同じように働く。
 ショートカットはシェル拡張の機能のひとつとして実現されており、操作には IShellLink というCOM インターフェイスを使用する。
 「ショートカットキー」とは別物なので注意。
 
ショートカットキー ( Shortcut Key )
 「短縮キー」
 複雑な操作をキーひとつかふたつで操作するためのウィンドウズの機能
 メニューの操作等は GUI の範疇なので通常はマウスで操作するが、これをキーで操作する方法がウィンドウズには備わっている。これが「ショートカットキー」である。
 ショートカットキーの設定はリソースを使用して行う。主にふたつの設定があり、メニューやボタンをキーで操作するためのニーモニックと、リソースのひとつ「アクセラレーター」を使用する方法とがある。
 「ショートカット」とは別物なので注意。また、ホットキーとも別物なので注意。
 
初期化
 ( Initialize )
 新しく作成したものを「使える状態」にすること。
 どのようにして「使える状態にする」のかは、そのものによって異なる。たとえば変数。変数の宣言時、その変数の中には支離滅裂なデータが入っている。そこで、変数の宣言と同時にデータを格納する方法が取られる。これを「変数の初期化」と言う。
 初期化と代入はである。特に C++ 言語クラスでは、前者はコンストラクタが呼ばれ、後者は operator = () が呼ばれるという点で大きく違う。
 const 変数や参照は、かならず初期化する必要がある。また、あとから代入によって値を変更することができない。これも代入と参照の違いである。
 
 
シリアライズ( Serialize )「連載」
 MFC を使用しているとき、変数内のデータをファイルへ読み書きするときの方法のひとつ。。
 MFC の CDocument 派生クラスが持つデータをファイルへと読み書きする場合、マクロ CArchive を組み合わせることで実現できる。ドキュメント/ビュー アーキテクチャーを用いている場合の一般的な方法だが、普通のファイル入出力とは違うため注意が必要。
 
シンク ( Sink )
 「受け皿」
  COM コンポーネントの分類のひとつ。コネクションポイントで継ながれたコンポーネントのうち、「メソッドが呼び出される側」を「シンク」と呼ぶ。
 
シングルタスク
 ( Single Task )
 「1度に1実行」
 1度にひとつのアプリケーションしか実行できないこと、もしくはできない OS
 MS-DOS などの旧形式の OS は、一度にひとつのアプリケーションしか実行できない。これを「シングルタスク」という。
 現在の多くの OS は、一度に多くのアプリケーションを実行できる。これをマルチタスクと言う。
 
シンタックス ( Syntax )
 「文法」
 プログラミング言語における文法。この文法に沿わないと、通常はコンパイルエラーが発生する。
 
シンタックスエラー ( Syntax Error )
 「文法違反」
 プログラムの文法(シンタックス的なエラー。
 コンパイラがプログラムをコンパイルするということは、プログラムを「読み解く」ということを意味する。しかしコンパイラもプログラムのひとつのため、柔軟に読み解くことはできず、細かい文法規則に従って読み解くことになる。プログラムが文法に違反している場合、プログラムは読み解けず、エラーを発生させる。これを「シンタックスエラー」と言う。
 広義としては「コンパイルタイムエラー」と同じ。
 
シンボリックデバッグ
 ( Symbolic Debug )
 「変数デバッグ」
 プログラム中の変数名や関数名と、それをコンパイルしたあとの機械語で表現された変数および関数とを結び付けて行うデバッグ
 機械語としてのコードには、変数名や関数名は残っていないため、そのまま見ても分かりにくい。そこで、コンパイル時にこれらを結び付ける情報を取っておき、デバッグ時に利用することで、プログラムと照らし合わせつつのデバッグが行えるようになる。これを「シンボリックデバッグ」と言う。
 Visual C++ ではこのデバッグがデフォルト。
 
数学関数
  sin cos のような「数学関数」は通常ライブラリがサポートしている。
 C ランタイムライブラリでは「浮動小数点サポート」のカテゴリに入っている。
 標準C++ライブラリでは「 <complex> 」に入っている。この場合には complex というクラスを使用する。
 数学関数は「割り切れない数」を生成する場合が多いため、浮動小数点 double float )を使用する。浮動小数点を使用した演算はCPUに負荷が掛かるため、CPUは浮動小数点演算専用の命令セットを持っている場合が多く、このカテゴリの関数はそれらの命令を使用する。
 どのような型であろうと、内部的に2進数で処理されていることに変わりはない。そのため、どうしても「2進数では表現できない10進数」が存在することになり、このためによる誤差が発生する。学術的な計算などの厳密な値が必要な場合には他の専用のライブラリを使用する必要がある場合もある。
 
スーパークラス
 ( Super Class )
 「親クラス」
 オブジェクト指向プログラミングの用語のひとつで、親クラスのこと。
 あるふたつのクラス継承関係にある場合、親クラス(基底クラス)にあたるクラスを「スーパークラス」と呼ぶ。
 対して子クラス(派生クラス)の方をサブクラスと言う。ただし「サブクラス」には「ウィンドウプロシージャの置き換え」という別の意味もある。ウィンドウズプログラミングではこの別の意味の方がよく使用されるので注意。
 もしかしたら「親クラスの機能も持っている子クラスの方がスーパーなクラスじゃないか」と思うかもしれない。 super には「上位の」という意味があり、また sub には「下位の」「副」という意味があるためこの表現が取られている。
 
スーパースカラー / スーパースケーラ
 ( Superscalar )
 「並列処理」
  CPU の命令処理方法のひとつ。複数の命令を同時に処理する方法。
 具体的には、パイプラインを複数持ち、平行して命令を処理する構造を指す。これにより、処理速度が増す。もちろん、 SIMD のような「パイプライン1本での高速化」も同時に行うことができる。
 だが、スーパースカラーではコード上の並んだ行を並列処理するため各行の依存関係が高く、アウトオブオーダーなどを行っても「隣の処理待ち状態」が発生しやすい。そのため実際にはあまり処理速度は増さず、無駄にならないよう多くの CPU はパイプラインを2つくらいしか持っていない。
 
スーパーセット
 ( Superset )
 「全体」
 ある部分を含む大きなもの
 たとえば「 APIWinsock のスーパーセットである」というふうに使用する。
 一般的に使用されるため、場合場合によってどのような意味か読み解く必要がある。
 スーパーセットに対し、「ある一部分」をサブセットと言う。
 
スカラー
 ( Scalar )
 「普通の数」
 普通の数。通常は「ベクトルではない値」という意味で使用される。ベクトルは「量と方向」のふたつの値を持つが、スカラーは「量」のみを持つ。
 
スクリプト
 ( Script )
 「小プログラミング言語プログラム」
 小さなプログラムを書くための言語、もしくはプログラムそのもの。
 特にインタープリター形式で簡単なバッチ処理を行うプログラムを書くための言語を指す。
 実際には言語よりも「プログラムそのもの」を指すことが多く、たとえば「そのスクリプトを使えば自動的に処理してくれる」のように使用する。しかしながら、それが「プログラムかスクリプトか」は、使用する言語に依存する事が多い。たとえば、どれだけ小さいプログラムであっても、 C 言語で書かれたものであれば「スクリプト」と呼ぶことはまずない。
 
スコープ( Scope )「視野」
 変数・関数クラスなどの「プログラム上の存在」を使用できる範囲
 最初から組み込まれていない、新たにプログラム上で宣言された存在は、プログラム上のどこからでも使用・操作できるわけではない。この限定された範囲を「スコープ」と言う。
 スコープは宣言された位置やリンケージによって決められる。スコープの範囲はしばしばグローバルローカルと呼ばれたりする。またクラスのメンバに関してはクラススコープという特別の制限が設けられている。
 一般に、スコープは狭ければ狭いほどいいとされる。スコープが広い場合、同名の存在とかち合ったり、思わぬ場所から使用されたりして、想像した結果がとならない場合がある。
 特に「操作されたかどうか調べにくい」「値が変更されると致命的な場合が多い」ことから、変数のスコープは可能な限り狭くするべきであるとされる。具体的には、 private メンバ変数として変数を作成し、メンバ関数のみを用いて操作するようにする、などの方法を取ることになる。
 
スタック( Stack )
 「整然とした積み重ね」
 メモリ領域のひとつ。
 通常の変数( auto 変数)、つまり「動的には作成していない変数」が格納される領域のこと。動的生成された変数は別の領域(ヒープ)に格納される。
 関数の中に入ると、その中の変数がスタック上に作成され、関数から抜けるとスタックから削除される。削除される変数の順序は必ず「最後に作成したものから削除する」ことになる。これを「後入れ先出し構造」または「先入れ後出し構造」と言う。関数から関数を呼び出した場合も同様。
 関数から関数を呼び出し続けるとスタックの領域に入りきらない数の変数が作成されてしまい、例外が発生する。これを「スタックオーバーフロー」と呼ぶ。スタック領域は Visual C++ ではデフォルトで1メガバイトである。これは /STACK オプションおよび、【プロジェクト】−【設定】ダイアログの【リンク】−【アウトプット】ページの【スタック アロケーション】で変更できる。ただし、通常「スタックオーバーフロー」が発生した場合にはプログラムの構造上の問題があると考えるべきである。
 広義として、「データ構造」が「後入れ先出し構造」または「先入れ後出し構造」のものを単に「スタック構造」と呼ぶ場合もある。
 
スタートメニュー
 ( Start Menu )
 スタートボタンを押すと表示されるポップアップメニュー
 スタートボタンを押すとメニューが表示され、「プログラム」からインストールされたプログラムが表示される。このメニューの項目は、 Windows フォルダの「スタート メニュー」(実際は半角カタカナ)以下のファイルが表示される。ただし、複数のユーザーが使用している場合にはこの限りではない。
 
スタートボタン
 ( Start Button )
 タスクバーの、タスクトレイの反対側についているボタン
 ウィンドウズのマークと「スタート」の文字が書かれたボタン。押すとスタートメニューが表示される。
 ただのボタンコントロールオーナードローを用いてアイコンと文字を書き込んでいる。
 
 
スタティックライブラリ( Static Library )
  「静的ライブラリ」
 ライブラリの一種。クラス関数コンパイル中間ファイルにしたもの。実行ファイルの作成時にそれらのクラスや関数を使用する場合、リンカがその中間ファイル実行ファイルの中に組み込む。つまり、普通に実行ファイルを作る場合とほとんど同じことで、一部のクラスや関数を前もってコンパイルしておいた、というもの。
 DLLと比較した場合、同じクラスや関数を複数の実行ファイルから使用した場合には、そのコピーがすべての実行ファイルに埋め込まれる分コストがかさむが、「それ単体で動く」ということは利点になる場合も多い。
 
 
スタティックリンク( Static Link )
  「静的連結」
 リンクの方法のひとつ。通常のリンク方法。
 中間ファイルの中に必要とする関数や変数が見つかった場合、その部分の機械語で書かれたコード実行ファイルの中に埋め込む方法。
 これとは逆に、埋め込まず、外部ファイルの中に置いたままにする方法がDLLである。
 
スタブ
 ( Stub )
 「切り株」
 一般には「受け止めるもの」という意味。
  COM 用語では、マーシャリングを行う場合に、使用される側、つまりコンポーネントの側で、マーシャリングされた「関数呼び出し」を通常の「関数呼び出し」に戻す機能を受け持つ。
 マーシャリングでは、異なるプロセス間で関数呼び出しを行うため、 DLL を介して関数呼び出しを行う。そのとき、呼び出す側の実行ファイルと、呼び出される側(コンポーネント)の実行ファイルとの両方に DLL が必要となる。このうち、呼び出される側(コンポーネント側)の DLL に含まれる機能で、マーシャリングされた関数呼び出しを、実行ファイルでの関数呼び出しに変換する機能を「スタブ」と呼ぶ。また、この機能を含む DLL を「スタブ DLL 」と呼ぶ。
 
スタンドアローン
 ( Stand Alone )
 「ひとりぼっち」
 他から接続されていない、独立して運用されるシステム。
 通常は、ネットワークに接続されていないコンピューターを指す。
 
ストール ( Stall )
 「失速 / 時間稼ぎ」
 主にみっつの意味がある。
 落ちるOS やアプリケーションが操作不能となる、もしくは異常終了することを「ストールした」と言う。「フリーズ」や「落ちた」とも言う。
 一定時間の待ち状態:一定時間、スレッド等を休止状態にすることを「ストールする」と言うことがある。「ウェイト」「スリープ」とも言う。
  CPU 処理の待ち状態スーパースカラー機能を持つ CPU は複数の命令を同時に実行できるが、この場合「同時に行われている命令の処理結果」が必要な場合には、一方の命令が終了するまでもう一方の命令が処理できないため無駄な時間が発生してしまう。これを「ストール」という。この問題はアウトオブオーダー機能によって改善できる。
 
ストリングテーブル ( String Table )
 「文字列リソース」
 リソースのひとつ。
 リソースとして文字列を格納することができる。各文字列は整数値が割り振られ、この整数値と LoadString() という API を使用することで文字列を取り出すことができる。
 リソースにまとめられることで文字列の管理や改変が楽になる。また、他言語バージョンが自動的に選択されるというメリットもある。
 
スパン
 ( Span )
 「間隔」
 一般には、ある時間や距離の間隔を意味する。「範囲( Range )」との微妙な違いに注意。
 
ストリーム ( Stream )
 「流れ」
 広義には、連続したデータの入出力を指す。たとえば、インターネット上で音声や動画を配信することを「ストリーミング」と言う。
 一般には、ファイルに対する入出力を行うための「もの」を指す。
 「もの」は、場合によって関数であったりクラスであったりする。また、これらを多数集めたライブラリの場合もある。たとえば C ランタイムライブラリには fopen() などの関数が用意されている。これらの関数を「ストリーム入出力」と言う。
 実際には、ストリームは「ファイル入出力」と同じと考えていい。
 
スプリットウィンドウ( Split Window )
 「分割」
 いくつかのウィンドウ分割されたウィンドウ
 ウィンドウに「柱」を通し、作られた枠の中にさらにウィンドウ(「ペイン」とも言う)を作成することで、MDIともSDIとも違う簡素化された表示を行うことができる。
 ウィンドウズ標準の機能ではなく、 MFC が独自にサポートしているもののため、 SDK ベースで作るのは難しい。
 
スプレッドシート( Spreadsheet )
 「簿記用紙」
 会計計算を行う用紙のような表示方法
 縦横に線が引かれ、その升目ひとつひとつ(セル)にデータが書き込まれる。表計算やデータベースといったアプリケーションで使用される表示方法。
 
スペック
 ( Spec )
 「仕様 / 性能」
 コンピューターの仕様。一般にはハードウェアとしての仕様のみに着目し、他のコンピューターと性能を比較するために使用される。
 プログラムによっては、高性能な CPU や演算処理チップ、大量のメモリやハードディスクを必要とするため、そのプログラムが必要とする「最低限のスペック」を把握し、配布するときに告知することが重要となる。
 
スマートポインタ
 ( Smart Pointer )
 「利口なポインタ」
 ポインタの自動破棄を行うためのラッパークラス
 変数の動的生成を行った場合、その変数が不必要になった時に delete などによって削除する必要がある。その削除を自動的に行うため、特定のへのポインタをメンバ変数として持ち、デストラクタがポインタに対して削除を行うクラスが「スマートポインタ」である。
 スマートポインタは比較的安全に破棄できる反面、操作にともなうオーバーヘッド、ポインタのコピーによる2重操作など、過信しきれない部分もある。
 スマートポインタの例として標準 C++ ライブラリ auto_ptr クラスがある。
 
 
スレッド( Thread )「糸、道筋」
 プロセスの中にひとつ以上含まれる「実行部分」。プロセスが作製されたとき、まずひとつ作製される。複数のスレッドを作製するにはCreateThread()API)かAfxBeginThread()MFC )を使用する。
 スレッドには次の3つの機能が備わっている。
 「プログラム進行」:ひとつのスレッドは、プログラムの流れをひとつ持つ。コードを読み込み、次の「実行」を行うのが、スレッドのメインの役目である。
 「実行」:スレッドは各種の実行を行うことができる。ファイルの操作、デバイスコンテキストへの描画、音楽の演奏等を行うことができる。
 メッセージキュー:スレッドは送られてきたメッセージを受け取ることができる。ただし、これはすべてのメッセージではなく、一部のメッセージは直接ウィンドウプロシージャへと送られる。
 これら3つの機能はすべてスレッドのものである。重要なのは、これらを平行して行えるわけではない、ということである。つまり、ファイル操作を行っているときにはプログラムの進行は止まり、メッセージは溜まっていくことになる。
 だが、これらの問題は他のスレッドに影響を与えない。複数のスレッドを作製すれば、あるスレッドには重いファイル操作をさせ、またあるスレッドは常にユーザーの操作を待つ、といった分担ができる。これがマルチスレッドの利点である。
 スレッドはプログラムから完全に抜け出たとき(つまり一番外側の関数が終了したとき)に自動的に削除される。そして、プロセス作成時に存在したスレッドが削除されたとき、プロセスも削除されアプリケーションの終了となる。
 
スレッドモデル / スレッディングモデル
 ( Thread Model / Threading Model )
 「スレッドのタイプ」
  COM 用語のひとつ。 COM コンポーネントが生成するスレッドの種類。
  COM コンポーネントが生成するスレッドには、シングルスレッドかマルチスレッドか、マルチスレッドであればアパートメントスレッドフリースレッドか、といった種類がある。この「分類」を「スレッドモデル」という。
 
スワップ
 ( Swap )
 「交換」
 広義としては「入れ替える」こと。 STL には std::swap() という「入れ替え」を行うための関数テンプレートがある。
 一般には、スワップと言えばスワップファイルを指す。
 
スワップファイル
 ( Swap File )
 「メモリの代わり」
 メモリ足りない部分を補うためのファイル
 OS 、アプリケーション、データのサイズが膨大になった今、実メモリが数十メガでは間に合わない場合が多い。そこで、そのメモリの足りない部分をファイルにし、ハードディスク上に置いたものが「スワップファイル」である。
 ハードディスク上のファイルである以上、メモリに近い高速アクセスは行うことができない。しかし、ハードディスクの膨大な領域を使用できるため、メモリ不足はまず起こさずに済む。
 プログラムを組む場合、スワップファイルを意識する必要はない。 OS は実メモリ上の領域とスワップファイル上の領域を区別することなく仮想メモリへと配置するため、プログラム側から区別することはできない。ただし「大きいデータを操作する場合は、スワップファイルを使用するため処理に時間が掛かる可能性がある」ことは憶えておく必要がある。
 
正規表現 / 正規構文
 ( Regular Expression )
 「言語規定言語」
 特定の言語仕様を記述するためのもの。
 言語には必ず「文のルール」が存在する。そのルールを記述するもののひとつが「正規表現」である。
 たとえばルールを「最初に A 、次に数字が1文字から4文字並び、最後に Z が来る単語、が3つ並ぶ文」のように決めることができる。こういったルールを用いて、通常は検索や置換を行う。これにより、複雑なルールに基づいて検索を行うことができる。また、言語処理を行う場合にも使用できる。正規表現で言語のルールを記述することで、文章がその言語のルールに則っているかどうか調べることができる。
 実際に正規表現を使用する場合、どのツールを使用するかによって書き方が変わってくる。ややこしい話だが、正規表現も一種の「言語」であり、多くの正規表現言語が存在するためである。
 Perl など正規表現を装備しているプログラミング言語もあるが、文字列型さえ持っていない C++ 言語には当然装備されていない。使用する場合には、フリーのライブラリを使用するのが一番簡単であろうと思われる。
 
セグメント ( Segment )
 「区分」
  far ポインタを使用するときに使う、アドレスずらすための整数値
  far ポインタの中身は、最初の2バイトを「セグメント」、後の2バイトを「オフセット」といい、セグメントに16を掛けたものをオフセットに足した値、がアドレスとして使用される。この仕組みによって、 near ポインタでは表せない範囲のアドレスを表現できる。
  Win32 ではポインタは32ビットサイズに固定されており、 far ポインタも存在しないためこの規則は使用されない。
 
 
セマフォ( Semaphore )「信号機」
 マルチスレッドやマルチプロセスで使用する同期オブジェクトのひとつ。
 APIによって作製、削除される。システムグローバルなオブジェクトのため、すべてのスレッドからアクセスできる。ミューテックスと違い、32ビットの整数値を持ち、この値をフラグとして各スレッドの同期を取る。値の変更をフラグにすることができるため、生成が間に合わないために同期に失敗する、という可能性はミューテックスよりも低い。
 
セマンティクス / セマンティック ( Semantics )
 「意味」
 プログラムの意味
 C++ 言語などのオブジェクト指向プログラミング言語は、プログラムを文法としての面と意味としての面の両方から考える必要がある。自然言語で「私は学校へ行く」という言葉が「物理的移動」や「学生への属性変化」などの色々な意味として捉えられることと同じである。
 例えば、あるクラスが他のクラス変数へのポインタを持つことを、その依存関係の強さによって集約コンポジションなど違うものとして捉えることが「プログラムの意味を読み解く」ということである。
 「文法と意味」は相互変換できるようにすること。「複製を作らせない」ようにするには「コピーコンストラクタ = 演算子 private で封印する」ことを知っている必要がある、と同時に、「コピーコンストラクタと = 演算子が private で封印されている」プログラムを見たら「複製を作らせないようにしている」と読み解ける必要がある。
 
宣言( Declare )
 それがなんなのかを明示すること。
 変数では特定のの変数を作成することを、関数では戻り値と関数名そして引数を示すこと(これらを「シグネイチャー」と呼ぶ)を意味する。
 変数の宣言は通常ソースファイルに、関数の宣言部は通常ヘッダーファイルに書き込む。
 しかし、クラスのように宣言部と定義部が融合しつつあるものもある。
 
全角文字
 「ぜんかくもじ」
 一般的なひらがな、カタカナ、漢字の文字
 2バイト文字の古い呼び方。最近は正式なドキュメントではあまり使用されない。現在使用する場合には、半角と対にして使用する。アルファベットやカタカナには、 ASCII 文字や半角カタカナなどの1バイトで表現される文字と、 MBCS を用いて1バイトx2で表現された文字との2種類があり、そのどちらを指すかが重要になる場合にこの表現が使用される。
 
前方参照
 ( Forward Reference )
 「未来参照」
 これから出てくるであろう存在を先に使用すること。
 たとえば C++ 言語プログラムで、プログラムの下の方で宣言されている変数をプログラムの上の方で使用することを「前方参照する」と言う。コンパイラはプログラムを「上から下へ」と見ていくため、まだ読み込んでいない下の方の領域はコンパイラにとって「前方」になる。
 この例は実際にはコンパイル時にエラーが発生する。C++ 言語で前方参照を行う場合、 extern を使用したり、あらかじめ関数クラスを宣言しておくことで解決できる。これはコンパイラに「とりあえずこれは存在します。定義はあとでします」と明示していることになる。
 このように、関数においては前方参照はごく普通のことである。クラスでは「ふたつのクラスが互いに参照しあう」場合等に前方参照が使用される。
 
ソースファイル( Source File )
 拡張子が .c または .cpp ファイル
 コンパイルはこの「ソースファイル」ごとに行われる。そのため、通常「コンパイルして欲しいコード」をソースファイルに書き込む。
 
ソート
 ( Sort )
 「並び替え」
 複数のデータを、特定の規則に則って並び替えること。
 たとえば「ファイルを五十音順に並び替える」ことなどを「五十音順でソートする」などと言う。ソートには「要素の比較」「要素の移動」をすべての要素に行わなければならないため、時間が掛かるという問題点がある。そのため、その時間を減らすためのアルゴリズムが各種用意されている。
 
ソケット( Socket )
 「差込口」
 ネットワークで使用する仮想的な接続先
 ネットワークを通して他のコンピューターのプロセスへと接続する場合、まずソケットと呼ばれる ID ナンバーを取得し、そのソケットに接続先のアドレスとプロセスのポート番号を結びつける。このあとは、ソケットを介するだけで接続先とデータのやりとりを行うことができる。ハンドルのようなものと考えればいい。
 
ソリューション( Solution )
 「解決」
 システムエンジニアが特定のシステム用のコンピューターシステムを作成すること。
 あるいは「必ず貴社の問題を解決します」という「殺し文句」。最近の流行だが、行っていることは以前のシステムエンジニアの仕事とほとんど変わらない。
 これと意味的には同じだが別のものとして、 Visual Studio を用いたホームページ用アプリケーションを作成する上でのワークスペースとして、「ソリューション」というものがある。
 
 
ダイアログボックス( Dialog Box )
 「対話窓」
 ウィンドウの一種。ウィンドウテンプレートを用いて簡単にウィンドウを作成することができる。通常、ボタンエディットボックスといったダイアログボックスコントロールを置き、ユーザーからの入力を得る。
 ダイアログには「モーダルダイアログボックス」と「モードレスダイアログボックス」がある。前者はダイアログが閉じるまで関数から返らない。後者はすぐ帰るため、こちらの方が普通のウィンドウに近いと言える。
 
ダイアログボックスコントロール( DialogBox Control )
 エディットボックスなど、ユーザーインターフェイスとしてダイアログに張り付けるウィンドウコモンコントロールの一種。
 エディットボックスやツリーコントロールなどは、ウィンドウの一種としてダイアログの上に張り付いている。ダイアログが親ウィンドウ、コントロールが子ウィンドウである。
 ウィンドウの一種のため、コントロールとのアクセスにはメッセージを使用する。たとえば、エディットコントロールに書き込まれている文字列を取得する場合には WM_SETTEXT を送り、ツリーコントロールで選択されているアイテムを取得する場合には TVM_GETNEXTITEM を送る。
 また、コントロールに対するメッセージの中には、ダイアログへと搬送されるものがある。これを通知メッセージと呼ぶ。
  MFC を使用する場合、これらは完全に隠蔽される。
 コントロールの値を取得する場合、 DDX と呼ばれる機能を使うことで、コントロールとメンバ変数とを関連づけ、面倒なメッセージ処理をしなくてもコントロールの値を取得することができる。
 また、操作が複雑なコントロールに対しても CTreeCtrl といったラッパークラスが存在するため容易かつ安全に操作することができる。
 
タイムスタンプ ( Time Stamp )
「時刻判」
 ファイル属性のひとつ。そのファイルの作成・更新等の日時が書き込まれている。しばしばファイルが更新されたかどうかのチェックに使用されるが、信用できるものではないためDLLなどはバージョン情報を用いてチェックする方がいい。
 
タイプライブラリ( Type Library )
 IDL を元に作成されたファイル
  IDL を用いて「他の言語や環境でも使えるようにした」場合でも、ヘッダーファイルの代わりとなるものが必要になる。それが「タイプライブラリ」である。このファイルの拡張子は通常 .TLB である。また、DLLの中に一緒に埋め込むこともできる。
 タイプライブラリは IDL IDL コンパイラに通したときに同時に作成される。
 
タイマー
 ( Timer )
 「定刻メッセージ」
 「ある一定時間ごとの処理」を行う場合に使用するもの。ウィンドウズシステムのひとつ。
 古いプログラミングスタイルでは「 for で時間稼ぎ」などを行うことで「一