|
|
|
|
|
" ( 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++」−「コード生成」ページの「呼び出し規約」で変えられる。 |
|
__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」しか入らない数字。 最初は0から始まり、1増やすと1に、さらに1増やすと(2はないため)繰り上がり10、さらに11、100、と数えていく方式。 メモリなど、コンピューターの中身はスイッチの「オン」と「オフ」の並びとなっており、これを数字として表すのに2進数が使用される。この場合、一桁の単位がビット、8桁でバイトとなる。 ただし、そのまま2進数として表すと桁数が膨大となってしまうため、2進数の4桁を一組とした16進数が一般的には使用される。 特定の2進数が「何を意味するのか」は、場合場合によって変わるので注意。その変換方法を定義するのが型ということになる。同じ2進数でも、その値を int と捉えるのか double と捉えるのかで変わってくる、ということである。 |
2バイト文字
( Double-byte Character ) 一般的なひらがな、カタカナ、漢字の文字。全角文字とも言う。 MBCS や Unicode を用いて日本語の文字列を表現した時、2バイトで表現した1文字を「2バイト文字」と言う。 アルファベットなどと違い、漢字などは文字数が多いため、1バイト文字として表現することはできない。そこで2バイトを使用して漢字等を表現する。これがひるがえって、「2バイト文字」と言えば「漢字やひらがな」を指すことになる。 |
16進数 ( Hexadecimal Digit )
「Fまで数」 一桁を「0」から「9」そして「A」から「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 ) 「国際計算機学会」 アメリカに籍を置く組織。「国際大学対抗プログラミングコンテスト」を開催しており、日本の大学もこの大会に参加している。 |
|
|
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付属の MFC やC ランタイムライブラリはこの関数を使用して機能している。つまりこのAPIがなければウィンドウズアプリケーションは作成できないと言える。 ライブラリとしての使い勝手はいいとは言えない。C言語のみの作成も考慮されているため関数と構造体のみで構成されている。また、ソースコードが公開されていないうえに使用方法にクセのあるものが少なくないため、初めて使う関数はドキュメントを熟読したりテストを行ったりする必要がある場合が多い。 |
|
|
argv
<アーグブイ> main() の第2引数。 アプリケーション実行時に渡されたパラメーターを格納する。文字列のポインタとなっており、そのポインタを配列として使用することで、各パラメーターを取得することができる。パラメーターの個数は argc に格納されている。 |
ASCII
( American Standard Code for Information Exchange ) 「標準英文字」 いわゆる「半角英数文字」を表す文字コード。 1バイトサイズの整数と、それに対応する英数文字との対応表を「 ASCII 」もしくは「 ASCII コード」と呼ぶ。コンピューターはこの変換表を用いて、整数値を英数文字へと変換する。 英数文字のみなので、基本的には7ビットサイズの整数値にすべての英数字が含まれている。だが実際には8ビットサイズ整数値として扱われ、その余分な領域に地域ごとの文字が割り当てられている。ドイツ語圏であればウムラウト、日本であれば半角カタカナといったように。 日本語用の文字コードは、主に2バイトで1文字を表す。しかし、たとえ日本語の文章だとしても、文章中の半角英数文字は ASCII コードに割り当てられた1バイトの文字として使用される。つまり、日本語の文章は、2バイトが1文字の部分と1バイトが1文字の部分とが混在しているということになる。日本語文章の表示には、この区別を付ける必要があるというわけである。「インターネットで半角カタカナが禁止」されているのは、文字コードによってはこの区別が付けられなくなってしまう場合があるためである。 |
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 )
<キャラ, カラ, チャー>「文字」 1バイトサイズの整数値型。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 プリプロセッサはその「サポートするためのもの」らしい。 |
const
( constant ) <コンスト> 「不変な」 変数を宣言するときに付けるキーワードのひとつ。 「変数の値」「ポインタの値」「ポインタおよび参照が指し示す値」が変更できないようにする。つまり const な変数は「読み取り専用」「リードオンリー」ということである。もし const な変数に対して書き込みを行おうとした場合、コンパイラがエラーを発生させる。 const はふんだんに使うべきであり、使える部分にはすべて使うのが望ましい。そうすることで「変数が書き換えられる範囲」を大幅に狭めることができ、保守性が大幅に向上する。 といっても、 const はキャストによって一時的に取り除くことができてしまうため、過信は禁物。 また、クラス型変数に const を適用する場合には、そのクラスが const メンバ関数を持っている必要がある。現状では多くのクラスライブラリが const メンバ関数をサポートしていないため、使いたくても使えない場合もある。 |
CORBA
( Common Object Request Broker Architecture ) <コルバ> 「共有物要求仲介機構」 プロセス間関数呼び出しついての仕様のひとつ。 COM や DCOM とは別の方法で、プロセス間での関数呼び出しを実現している。ちなみに 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 の使用方法も出てきており、これからも使われていくであろうと思われる。 |
|
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 や機種間での依存性を考慮せず管理することができる。 |
|
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 で使用する。ネットワークを通した多人数での処理を潤滑に進めるためのアプリケーション。いわゆるグループウェア。情報の共有・排他・配信・管理を行う。 |
|
explicit <エクスプリシット>
「明示的」 引数をひとつだけ受け取るコンストラクタに付けることのできる C++ 言語のキーワード。 クラスを関数の引数として使う場合、その関数には、クラスのコンストラクタの引数になっているものも渡すことができてしまう。これは暗黙的にコンストラクタが呼び出されるからである。このとき、「コンストラクタの引数」がまるで「関数の引数」であるかのように振る舞ってしまい、本来ならコンパイルエラーとなって欲しい場面でも、見えない部分でコンストラクタが呼ばれることでコンパイルが通ってしまう。その結果、想定していない動作をする可能性がある。 そこで、コンストラクタには「暗示的に呼び出せない」ようにするためのキーワードがある。それが explicit である。このキーワードを付けたコンストラクタは、必ず明示的に呼び出される必要があり、前述のようなことをしようとするとコンパイル時にエラーが発生する。 |
extern
「外部」<エクスターン> ヘッダーファイル内で関数やグローバル変数に使用するリンケージ指定子。 この単語を使用したものは「ソースファイル内に実体が存在する」という意味になる。この場合、コンパイル時には「仮の存在」として扱い、リンク時に「中間ファイル」内の実体と結びつける。これにより、ひとつの存在を複数のソースファイルから共有利用する事ができる。 通常の関数はすべて extern が付いていると見なされる。 ひとつの変数を複数のソースファイルから共有する場合には、グローバルな変数として作成し、使用する側でその変数名を extern 指定する。通常は、「変数を置くソースファイル」内で普通にグローバル変数として作成し、そのヘッダーファイルで extern int g_i; のように指定し、変数を使いたいソースファイルがこのヘッダーファイルをインクルードすることで実現する。 言ってみれば、ヘッダーファイルの extern 指定は、関数における宣言にあたるものと考えればいい。この指定がある変数は「どこかに実体がある」とリンカが判断する。 実際には、グローバル変数は極力作成すべきでない。通常は関数内に static 変数として作成し、その参照を返すようにすることで実現する。 extern には extern "C" という使い方もあるが、これはここまでの解説とは「まったく別物」と考えるべきである。これについては名前装飾を参考にすること。 |
|
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 がある。 |
|
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 が「0」であれば、次の行は実行されない。 この 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 規格は、その企業が「正しい行いをしている」ことを証明するもののため、多くの企業がこぞって取得している。 |
|
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 、引数は argc と argv を持ち、これによって渡されたパラメーターを取得することができる。 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としてサポートされている。 |
|
MIMD
( Multiple Instruction Multiple Data / Multiple Instruction Stream Multiple Data Stream ) 「複数命令複数データ」 複数の CPU を同時に使用し、それぞれの CPU に別々の命令を処理させること。 いわゆる普通の「マルチプロセッサ」による処理を指す。この単語は、「1命令複数データ」で複数の CPU を使用する SIMD と対比する場合に使用されることが多い。 SIMD はひとつの命令を複数の CPU で実行することで「ある特定の処理の処理速度を向上させる」ことが目的だが、 MIMD は複数の CPU で別々の命令を処理するためコンピューター全体での処理速度を向上させることができるようになる。 |
Microsoft
<マイクロソフト> ソフトウェアを開発し販売する企業の最大手。 Windows NT 、 Visual Studio 、 Visual 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 についての知識が必要な場合が多い。 |
|
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() などのファイル入出力で、ファイルと同じように通信を行うことができる。 |
|
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 を使うプログラマーもいる。 |
|
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に比べて信用性は劣ると言える。 だが、互いの長所と短所を確認して、住み分けると同時に、歩み寄っていく予兆はある。 |
|
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 、それ以外の場合には char に typedef される。 文字列操作に使われる型、 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 各標準の認証を取得するために活用できるということで注目されている。 |
|
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 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 )
2バイトサイズの整数値型。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 と呼ぶばあいが多い。 |
|
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 が稼働し続ける気配を見せている。 |
Winsock ( Windows Socket )
「ウィンドウズ通信 API 」 API のカテゴリのひとつ。 ソケットを用いたネットワーク通信を行うためのライブラリ。関数には WS のプレフィックスが付いている。 |
WM_ ( Window Message )
「ウィンドウメッセージプレフィックス」 ウィンドウを操作するためのメッセージに付いているプレフィックス。 ウィンドウ操作用メッセージの多くはこのプレフィックスが付いている。ただしツリービューコントロールなどダイアログボックスコントロールを操作するためのメッセージは、それぞれ異なるプレフィックスを持つので注意。 |
WNDPROC
型のひとつ。 関数ポインタの型のひとつ。 API によって「戻り値 LRESULT 、引数が HWND, UINT, WPARAM, LPARAM 、CALLBACK 付き」の関数へのポインタとして定義されている。この関数はウィンドウプロシージャとして使用するものであり、コールバック関数としてウィンドウズシステムから呼び出される。コールバック関数は、引数や戻り値が決まっていないとウィンドウズシステムからの呼び出し時にエラーが発生してしまうため、このように型が決められている。 |
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 文章を表示することができる。 |
|
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はオブジェクトが持つメソッドからしかアクセスできず、オブジェクトの外からはアクセスできない(一部例外あり)。 protectedはprivateが少し緩やかになったもので、派生先のオブジェクトのメソッドからもアクセスできる。 これらはデータの使われ方をデータ自身、オブジェクト側で指定するという部分において大きな意味を持つ。 オブジェクト内の重要なデータを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 アドレスを指す場合もある。 |
|
アペンドモード ( Append Mode ) 「追加状態」 ファイル入出力や標準 C++ ライブラリの iostream 系クラスでのモードの一種。このモードの場合、元々あるファイルデータや文字列の最後にデータを加えていくことになる。何らかのログを録る場合などに便利。 |
アライメント
( Alignment ) 「整列」 主にふたつの意味がある。 「構造体のメンバ変数の最小サイズの統一」という意味で使われることが最も多い。 Visual C++ のデフォルトでは、構造体内のメンバ変数のサイズが8バイト以下のサイズだった場合、コンパイラが無駄な領域(パディング)を加えて8バイトちょうどもしくは4バイトちょうどにしてしまう。そのため、構造体のサイズはたいがい8の倍数となる。このように、構造体内に置かれたメンバ変数を「数バイトずつ」に置くよう並べられることを「アライメント」と呼ぶ。 アライメントが整えられる理由は、そうされることでコンピューターが処理しやすくなるからである。コンピューターや OS が「32ビット」であればすなわち「4バイト」がもっとも計算しやすいサイズであり、そのために計算しやすいよう4バイトの倍数に並べられるのである。反面、ファイルからバイナリーモードで直接構造体に書き込む場合などには、無駄な領域が邪魔になることが多い。 アライメントは Visual C++ であれば【プロジェクトの設定】ダイアログの【 C/C++ 】−【コード生成】ページの【構造体メンバのアライメント】で変更できる。また #pragma pack を使用しても変更できる。 C++ 言語においてクラスと構造体はほぼ同じであるのにクラスについては触れない理由は、クラスは仮想関数や継承などの関係で内部のメモリ状態が複雑な場合が多く、そのためアライメントのようにメモリ状態を気にするようなプログラムは組むべきでないからである。これは逆に言えば、 C++ のプログラミングスタイルとしては、構造体に関してもアライメントにこだわるようなプログラムは組むべきでないとも言える。 もうひとつ、単純に「絵的な整列」を指す場合もある。コンソールへの出力を「右揃え」などにしたりする場合や、ダイアログボックスコントロールを綺麗に並べる場合などに「アライメントを整える」と言ったりする。 |
|
委譲 ( 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 である。これは、インスタンスハンドルがベースアドレスであり、実行ファイル等の設定によって決定される値であるためである。 また、テンプレートインスタンスは元の意味は同じだがまったくの別物。 |
|
インターネット ( Internet )
IP に則った、コンピューターが相互に通信を行うための方法。 コンピューター通信の古い方法は、直接電話を継なぐものであった。インターネットは、コンピューターどうしを「網の目」状に継なぎIP アドレスによってコンピューターを一意に識別できるようにしたため、同時に多くのコンピューターとアクセスできるようになった。 インターネットに接続したあと、どのような処理を行うかはどのプロトコルに則るかによって決まる。 |
インターフェイス ( Interface ) 「接触面」 広義には、何かと何かが接触する部分を指す。これによる派生語にユーザーインターフェイスなどがある。 「インターフェイス」という単語には、主にみっつの意味がある。 ひとつはハードウェアとしてのコネクタ。プログラミングとはあまり関係ない。 ふたつめはオブジェクト指向プログラミングでのメソッドを意味する。 みっつめは抽象クラスとしての意味。 COM で使用するクラスは抽象クラスを用いて動的に DLL をロードするため、このクラスのことも「インターフェイス」と呼ぶ。 |
インプリメント / 実装
( Implement / Implementation ) 「遂行」 定義部をプログラミングすること。「実装」とも言う。 具体的には関数内部を記述することを意味する。もしくは「定義部」そのものを表すこともある。 プログラムを作成する場合、まず関数やクラスの仕様を決め、互いの関係図を作成する。これにより、関数とクラスの宣言部が作成できる。 その次の段階として、関数およびメンバ関数の中身をプログラムすることになる。これを「インプリメントする」もしくは「実装する」と言う。 API など、一部のライブラリは実装部を隠蔽化している。また、自分が作った関数であっても実装部を確認してから使用することを徹底することは難しい。そのため、関数の使用を難しくするような実装を行うべきではない。宣言部が分かりにくく、渡した引数がどう処理されるか分かりにくい関数を使用する場合には、実装部を見たり、動作について試行錯誤しなければならなくなる。関数の宣言部を分かりやすくし、その宣言どおりに関数を使用すれば期待通りの結果を実装部がもたらしてくれる、それが理想的な関数である。 「インプリメント」と「実装」の使い分けは、「インプリメント」はオブジェクト指向プログラミングで比較的よく使われ、「実装」はそれ以外の広い分野で使われることが多い。 |
隠蔽( Hiding )
「何か」から隠すこと。 「プログラマーから強制的」に隠す場合、それはソースファイルがないことを意味する。ヘッダーファイルのみの情報で関数やクラスを使用することで、実装部について考えさせない。ウィンドウズAPIなどがこれに当たる。 「コードは付いているが見ずに済む」という場合もある。関数のオーバーロードやテンプレートなどを使用することで、実際のオブジェクトの操作と内部的な動作を結びつけさせない。 クラスにおいてはカプセル化と同じ意味であることが多い。 |
インラインアセンブラ ( 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 ) 「代行指向」 コンピューターが自分で判断し、勝手に処理してくれる、という方向性を持つこと。 コンピューターは基本的に「人の命令通りに動く」ものであり、それがプログラムである。この一歩先にあるのがオブジェクト指向である。オブジェクト指向におけるオブジェクトは、自分の情報を持ち、自分が成すべきことを知っており、オブジェクトに対して命令を行うことで、オブジェクトは自らが知る適切な処理を行う。 エージェント指向はそのさらに先を行くものである。エージェント指向におけるエージェントは、情報を理解し、自立的にユーザーの処理を肩代わりする。つまり、これまではユーザーが行わなければならなかった部分を、エージェントは自分で判断して自動的に行ってくれることになる。 現在は研究段階であり、実用には至っていない。 |
エスケープシーケンス
( 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 ) ひとつの式に複数の演算子がある場合、どの演算子が先に機能するか、その順番。 コンパイラは、式の解釈を確実に行うため、複数の演算子の中でどれをまず機能させるか、ということを決めている。これが「優先順位」である。 優先順位に依存したプログラムは書くべきではない。プログラムの理解が難しくなるからである。 |
|
エントリーポイント ( 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 ) オブジェクト指向プログラミングのできるプログラミング言語。 と言っても、オブジェクト指向プログラミング自体がとても広い意味を持つため、一概に「この言語がオブジェクト指向プログラミング言語である」と明言できるものではない。 |
|
オフセット ( 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 Window )
子ウィンドウを持つウィンドウ。 ウィンドウの作成には、 API では CreateWindowEx() 等を、 MFC の場合には CWnd::CreateEx() 等を使用する。これらの関数を呼び出すときに「親となるウィンドウ」を指定することができる。この指定を行うことで、指定したウィンドウが「親ウィンドウ」に、作成されたウィンドウが「子ウィンドウ」となる。逆に、この指定を行わなかった場合、作成されたウィンドウは親を持たないウィンドウとなる。 子ウィンドウは常に親ウィンドウの手前に来る。また、通知メッセージなど、一部のメッセージは子ウィンドウではなく親ウィンドウに送られるため、ウィンドウ管理を親ウィンドウで一元管理することができる。 MFC のフレームワークでは、フレームウィンドウが親ウィンドウ、ビューウィンドウが子ウィンドウとなっている。 また、「親ウィンドウ」は、しばしば「トップレベルウィンドウ」を指す場合もある。 |
|
改行文字 / 改行コード / \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 はこの機械語しか理解できない。 言語と呼べる代物ではないため、通常はアセンブラへと変換して表示する。 |
|
キック
( 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 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 ) 「重要な部分」 マルチスレッドやマルチプロセスで使用する同期オブジェクトのひとつ。 他の同期オブジェクトと違い、クリティカルセクションオブジェクトそのものはフラグとして機能しない。クリティカルセクションの目的は、実行コードの一部をロックし、たったひとつのスレッドのみが実行できるようにすることである。 関数などで特定の変数へのアクセスを行う場合、その前後をクリティカルセクションで囲むことにより、たったひとつのスレッドのみがそのコードを実行できることになり、結果リソースへの同期が守られる。ミューテックスなどと違い、範囲の広いコードや複数の関数からアクセスされる変数などには使いにくいが、その分単純でデッドロックしにくいプログラムを作りやすいと言える。 注意すべきなのは、この同期オブジェクトのみ、単一プロセス内でのみ使用できる。ミューテックスのように複数プロセスにまたがった同期は取れないので注意すること。 |
|
クロージャー
( Closure ) 「閉包」 広義には「閉じるもの」もしくは「閉じたもの」。 オブジェクト指向プログラミングでは、オブジェクトとメソッドをひとまとめにしたオブジェクトを指す。 C++ 言語風に表現するなら、あるクラスへのポインタと、そのクラスが持つメンバ関数へのポインタをセットにして持ち、普通に(非メンバ関数的に)関数として呼び出すことができるような変数、ということになる。 他言語には備えているものも多いが、 C++ には備わっていないため、必要とするならクラスとして同様な機能を持つものを作ることになる。 |
グローバル( Global )
「大域 / 広域」 ソースファイルもしくはプログラム全体のどこからでもアクセスできる変数、関数、型のこと。 変数などに対してアクセスできる範囲をスコープという。この範囲がソースファイル全体、もしくはそれ以上に及ぶものを「グローバルなんとか」と呼ぶ。変数の場合には「グローバル変数」と呼ぶ。 範囲がソースファイル内か、それ以上に及ぶかはリンケージによって決定される。ソースファイル内に限定される場合には「ファイルスコープを持つ」と呼ばれる場合もある。 グローバルでない場合をローカルであると言う。またメンバ関数およびメンバ変数はクラススコープという別の範囲を持つ。 グローバルな変数は、中カッコ( { ... } )に囲まれていない位置で宣言することで作成できる。ただし、一般的にグローバル変数は作成してはいけない。作る場合には関数と static 変数を組み合わせ、その参照を返す形で作成するのが望ましい。 関数は通常グローバルなものであり、どこからでも呼び出せる。 これとは別に、ウィンドウズにはグローバルリソースというものがある。これは、プロセス間で共有できるという点で「グローバル」である。 |
グローバルリソース ( Global Resource )
「ウィンドウズ全体資源」 あらゆる存在からアクセスされ使用されるリソース。 一般にはウィンドウズオブジェクトそのものを指す。ウィンドウズオブジェクトは各プロセスからアクセスできるため、管理に関して注意する必要がある。 |
継承 ( Inheritance ) <けいしょう> あるすでに存在するオブジェクトを元に、機能を追加した新しいオブジェクトを作成する、オブジェクト指向プログラミング言語の機能。 オブジェクトを細かく作っていくと、似たような物が多数出ることがある。例えば「人」というオブジェクトがあれば、「男」と「女」や、「大人」と「子供」や、「上司」と「部下」といった、一部のプロパティやメソッドのみが違うオブジェクトが多く存在することになる。 こういったときに役立つのが「継承」である。「継承」とは、あるオブジェクト(継承元)のプロパティやメソッドを別のオブジェクト(継承先)でまるごと使えるようにしてしまう機能である。 重要なのは、これは決してコピーするわけではないということである。継承先を作製した後で継承元を変更したとしても、その変更は継承先へも受け継がれる。これによって、コードの肥大化によるバグやファイルサイズの増大を防ぐことができるということになる。 ただし、機能を増やすだけの安易な継承は控えるべき。あまりにも多くの機能を持つクラスは複雑化し問題が発生しやすい。 is-a 関係であるかどうか、 集約の方が適当ではないか等考慮してから継承すべきである。 |
言語処理
( Language Processing ) 特定の文字列を「何らかの言語で記述されている」と見なし、それを解読すること。 通常字句解析・構文解析・意味解析等を行う。 コンパイラがプログラムを解読することも言語処理のひとつである。 |
検索 ( Retrieve )
特定のデータを探すこと。 サーチ、クエリーとほぼ同じ意味。 プログラミングにおいては、ふたつの点で重要となる。 ひとつは「速度」。膨大な量の中から見つけだす場合、どれだけ早く見つけられるかが重要となる。 もうひとつは「引っかかりやすさ」。英語と違い日本語は、単語ごとの区分を見分けることが容易でない。そのため、どれだけの許容範囲で「一致」とみなすのかが大きな問題となる。範囲が狭ければまったく見つからず、大きすぎれば大量に見つかってしまう。 インターネットによって「元のデータ」が非常に膨大となった今、検索技術は非常に重要な分野だと言える。 |
|
子ウィンドウ ( 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 などのコネクションベースのプロトコルでは、通信相手と「接続」することで、その接続相手とのみデータの送受信を行う。送信したデータは送信した順番に正確に送られる。 対照的に、コネクションレスな通信では好きな時に好きな相手に対して好きなタイミングにデータの送受信を行うことができる。しかしその分、受け取る側は「複数の相手からバラバラに送られてくる」ことになるためその確認を行う必要がある。 |
コミット
( Commit ) 「確定」 主にみっつの意味がある。 「確定書き込み」:ディスク上にデータを書き込むことを「コミットする」と言う。データベースの用語として主に使用される。処理途中でのエラーによって中途半端な書き込みが行われることはない、という意味で「コミット」という単語が使用される。また、一度書き込まれた内容は書き込み前に戻ることはない、という意味でも使用される。 「メモリの確保」:予約(リザーブ)しているメモリを、使用できる状態にすることを「メモリをコミットする」と表現する。なんとか Alloc 系を用いて動的にメモリを割り当てを行う場合にこの単語がよく使用される。 「明言する」:何かを明言すること。プレスリリースのように、何らかの効力を持つ場合が多い。基本的にはプログラミングと関係ないが、資料などにはこの単語が使用されている場合がある。 |
コモンコントロール ( Common Control )
「共通ユーザーインターフェイス」 エディットボックスなど、ウィンドウズの標準ユーザーインターフェイス。 そのほとんどはダイアログに置くためのダイアログボックスコントロールである。ダイアログに置かないものはツールバーなど少数。基本的な仕組み(ウィンドウのひとつであることなど)はダイアログボックスコントロールと同じなのでそちらを参照のこと。 |
コレクション( Collection )
「収集」 特定の型の複数の変数をひとつにまとめて管理するもの。 C++ 言語に組み込まれている配列は、動的にサイズを変更できないことや、要素インデックスかポインタでしかアクセスできないというデメリットがある。これらの問題点を克服した、いわば「配列の進化型」がコレクションである。 通常クラスを用いて実現する。プログラマー独自のクラスなどを格納する場合にはクラステンプレートを用いて実現されたものを使用する。 コレクションには、配列のように機能するものだけでなく、要素インデックスを持たない「リスト構造」や、要素インデックスが自由な「辞書」など、様々なタイプがある。 よく使われるコレクションクラスには、 MFC の CArray や CList 、 STL の std::vector や std::list がある( STL のものはコンテナと呼ばれている)。これらはすべてクラステンプレートを用いているため、格納する型を決めることができる。また、MFCには格納する型が固定されている CString などのクラスも用意されている。 |
|
コンストラクタ( 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 というエラーが発生する。対照的に、「無効なポインタを使用しようとした」ときは、実行したときに「ページ違反」というエラーが発生する。この前者を「コンパイルタイムエラー」、後者を「ランタイムエラー」という。 また、ポリモーフィズムにおいて、関数のオーバーロードを使用するものを「コンパイルタイムポリモーフィズム」、仮想関数を使用するものを「ランタイムポリモーフィズム」と呼ぶ場合がある(ただし通常「ポリモーフィズム」と言ったら後者を指す)。 「コンパイルタイム」の場合、エラーも動作も決められたものだが、「ランタイム」の場合は、エラーも動作もその場その場で違うものとなる場合が多い。そのため、「コンパイルタイム」は予測が付き、安全だが、融通が利かない。また「ランタイム」はフレキシブルで自由度が高いが、何が起こるか分からず対処しきれない可能性がある。 実際にはこのふたつをうまく組み合わせていくことになるが、「安定性を重視する」のであれば当然「コンパイルタイム」寄りとなるだろう。 |
|
コンポーネント( Component )
「構成要素」 広義には「プログラムを構成する部品」。この場合にはクラスも含まれる。 通常は「隠蔽化され外から見えない部品」を意味する。DLLやCOMを指す場合が多い。プログラムの一部を分け隠蔽化し「部品」とすることで、他のプログラムとの依存度が少ない独立したパーツとなり、取り外しや使い回しが楽になる。隠蔽するものはたいがいクラスであり、結果コンポーネントはクラスもしくはオブジェクトとしての機能する。特定のクラスをコンポーネントに封じ込めることを「コンポーネント化する」という。 狭義としてはCOMもしくはCOMインターフェイスを指す。 |
コンポジション ( Composition ) オブジェクト指向プログラミングにおける専門用語のひとつ。 「関連」の一種。あるクラスが他のクラスをプロパティとして直接的に持つこと(C++の場合。 Java では参照として持つ)。 こうすることでひとつのクラスであるかのように機能し、継承とは違う方法で「ひとつのクラスにふたつのクラスの機能を組み合わせる」ことができる。通常、コンポジションされるクラスはランタイムに変えられない。 |
|
サーバー( 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 ) 「一部分」 ある大きなものの一部分。 たとえば「 Winsock は API のサブセットである」というふうに使用する。 一般的に使用されるため、場合場合によってどのような意味か読み解く必要がある。 サブセットに対し、「ある大きなもの」をスーパーセットと言う。 |
サンク( 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 を組み合わせることで実現できる。ドキュメント/ビュー アーキテクチャーを用いている場合の一般的な方法だが、普通のファイル入出力とは違うため注意が必要。 |
|
シングルタスク
( Single Task ) 「1度に1実行」 1度にひとつのアプリケーションしか実行できないこと、もしくはできない OS 。 MS-DOS などの旧形式の OS は、一度にひとつのアプリケーションしか実行できない。これを「シングルタスク」という。 現在の多くの OS は、一度に多くのアプリケーションを実行できる。これをマルチタスクと言う。 |
|
シンタックスエラー ( 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 ) 「全体」 ある部分を含む大きなもの。 たとえば「 API は Winsock のスーパーセットである」というふうに使用する。 一般的に使用されるため、場合場合によってどのような意味か読み解く必要がある。 スーパーセットに対し、「ある一部分」をサブセットと言う。 |
|
スクリプト
( 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 で時間稼ぎ」などを行うことで「一定時間ごとの処理」を実現していたが、ウィンドウズのようなマルチタスク OS の場合これだと「何もしてない間に CPU パワーを奪う」こととなるため他のアプリケーションに迷惑をかける。そこで、ウィンドウズではこれとは違う専用のシステムを持っている。 API の SetTimer() を使用することで、一定時間ごとにコールバック関数が呼ばれるようにするか、もしくは WM_TIMER メッセージが送られてくるようにすることができる。 MFC の場合には CWnd::SetTimer() というメンバ関数が同じ機能を持つ。 このシステムを使用することで、「一定時間経った」ことをイベントとして処理できるようになる。タイマーを使用することで、待ち時間中に他のことをすることができる。 ただし、このタイマーは精度が悪いため、ゲームなどに使用するのは控えた方がいいだろう。 |
ダウンキャスト( Down Cast )「下方向型変換」 クラスの継承先方向へのキャスト。 「下」なのは、クラス図を書いたときに継承元が上に、継承先が下に来るため。木の「根」を思い浮かべると分かりやすい(「枝」を思い浮かべてはいけない)。 はっきり言って危険。できるだけ使用しないことをお勧めする。たとえばtheAppへのポインタを取得したい場合にも、関数ひとつ作成すればいい。そういったプログラミングが、安定したアプリケーションを作成するコツといえるだろう。 |
タグ
( Tag ) 「札 / 目印」 C 言語における、構造体およびenumの名前。 struct および enum の右隣に来る単語は「タグ」と呼ばれる。タグは型に近い機能を持つが、厳密には型ではなく、そのため省略することもできる。 C++ 言語での構造体は、クラスとほぼ同じ物のため、タグではなく型として使用する。 |
多重継承
( Multiple Inheritance ) クラスの継承において、継承元クラスが複数存在すること。 複数のクラスから継承することで、ひとつのクラスに複数の機能を含めることができる。が、クラスの関係が複雑化するため、「機能の統一」を行うために使用するのは控えるべき。 |
タスク
( Task ) 「仕事」 広義には「プロセス」のこと。たとえば「タスクスケジューラ」は設定時間に合わせて「アプリケーションの実行」、つまり「プロセスの作成」を行う。 一般には「プロセスを代表するウィンドウ」として使用されることの方が多い。たとえば「タスクバー」はトップレベルウィンドウを列挙し、「タスクマネージャ」はトップレベルウィンドウを管理する。 |
タスクバー ( Task Bar )
「ウィンドウ一覧」 画面の端に付いている長細いウィンドウ。 「スタートメニュー」を表示させるボタン、トップレベルウィンドウの一覧を表示させるタブコントロール、時計と各種アイコンを表示するタスクトレイで構成される。 IE4 以降をインストールした場合には、ランチャー機能を持つツールバーも追加できるようになる。 |
タブ ( Tab )
「一定距離スペース / つまみ」 主にふたつの意味がある。 「長いスペース」という意味。「半角/全角」キーの下、「 CapsLock 」の上にあるキーで入力できる。文字コードは 0x09 。プログラムでは、ネストを深くする度にインデントを行うが、たいがいはこのインデントにスペースではなくタブを使用する。 「ダイアログボックスコントロール」のひとつというのがもうひとつの意味。ダイアログボックスコントロールのひとつ、タブコントロールのひとつひとつを「タブ」と呼ぶ。 |
タブコントロール ( Tab Control )
「札コントロール」 ダイアログボックスコントロールのひとつ。 四角い「札」をいくつも持ち、そのうちのひとつを選択することができる(この「札」を「タブ」と呼ぶ)。ウィンドウクラスが SysTabControl32 のウィンドウでもある。 タブコントロールへのアクセスは API であればプレフィックスが TCM_ のメッセージを使用する。 MFC であれば CTabCtrl クラスを使用する。 ただし、一見タブコントロールに見えるものも、そのほとんどはプロパティシートを使って実現されている。使用もプロパティシートの方が楽な場合が多い。 |
ダンプ( Dump )
「投げ捨て」 デバッグ方法のひとつ。メモリやファイル、変数などの中身をコンソールやデバッグアウトプット、ファイルなどに出力すること。 特定のデータに問題があると思われたとき、その中身を調べるために行う。しかし、通常のデバッグ時に変数の中身を直接見られることや、メモリ上の16進データを見ても原因を掴めない場合が多いことなどから、VCではあまり使用されないデバッグ方法。 MFC のクラスはすべて同名のメンバ関数を持っており、呼び出すとメンバ変数の中身を出力する。 |
チャット ( Chat )
「おしゃべり」 ネットワークを介してリアルタイムに文章のやりとりをすること。 通常は専用のアプリケーションを使用する。もしくはインターネット上のホームページを用いて実現する。比較的リアルタイムに文章のやりとりができるため、会議の代わり等にも使用できる。最近は、図や音声も含めたチャットもある。 |
チャンク
( Chunk ) 「塊」 ファイルの先頭部分に入っている、各種情報が入っている領域。 音声や動画など、多くのフォーマットは、実際のデータ部分の手前に、そのデータの意味サイズ、特別な名称や著作権などが書き込まれた領域がある。これを「チャンク」という。「ヘッダー」と言われる場合もある。 |
中間ファイル ( Intermediate File )
実行ファイルもしくは DLL の作成途中に作られるファイル。 通常は、コンパイルすることで作成されるファイルを指す。この中間ファイルをリンカがひとつにまとめることで実行ファイルなどになる。 Visual C++ ではオブジェクトファイルがこれに当たる。 |
抽象化 ( Abstraction )
「適当化 / 概念化 / 隠蔽化」 プログラムをより「まあテキトーにやって」的にすること。 たとえば「画面への描画」を行う場合、最も原始的な方法を使うとすれば、ビットマップのドットをひとつひとつ変えていき、それを画面に反映させる、という方法となる。これを「抽象化する」ということは、「線を引け」「塗り潰せ」等の命令だけで行えるようにする、ということである。つまり実装部を隠し、操作をより直感的かつ分かりやすくすることを指す。 具体的にプログラム上では、オブジェクト指向プログラミング言語が持つ機能、たとえばポリモーフィズムや抽象クラス、カプセル化などによって実現されることが多い。また、オブジェクト指向プログラミング言語を使用しなくても、細かい実装を隠すことによって抽象化を行うことができる。 抽象化の度合いを抽象化レベルという。抽象化レベルは、プログラムの組やすさを大きく左右する。 |
抽象化レベル ( Abstraction Level )
「抽象化の度合い」 実装部がどれだけ抽象化されているか、その度合い。 細かい実装に依存したプログラムを組む場合、移植性や可読性が落ちる可能性がある。それを避けるために抽象化を行うことが多い。ところが、この抽象化を行いすぎると、あまりにも実装とかけ離れてしまい、何が行われているのかまったく分からなくなってしまう場合がある。このような場合、「どれだけ抽象化したか」が重要となる。この度合いを「抽象化レベル」という。 |
抽象クラス( Abstract Class ) 純粋仮想関数を持つクラス。 仮想関数は宣言のみにすることができる。つまり定義を書かず、実際の定義は継承先のクラスに任せてしまう。この仮想関数を純粋仮想関数と呼ぶ。 純粋仮想関数は実装されていないので、呼び出せない関数が存在することになる。そのため、抽象クラス型の変数は作成できない。 だが抽象クラス型のポインタは作成できる。このポインタへと継承先のクラス型変数をアップキャストさせることで、抽象クラスを通して派生クラスを使用することができる。 この仕組みはポリモーフィズムやインターフェイスを実現するときに便利である。実際、 Java では abstract というキーワードを用いて抽象クラスを定義する。ちなみに Java の interface はクラスではないため厳密には「抽象クラス」ではない。 |
ツールバー ( Toolbar )
「簡単ボタン」 メニュー下などに付けるボタン群。 ある特定の機能を実行したい場合、メニューは階層深くまで探す必要がある、ショートカットキーは憶える必要がある、などの部分で面倒である。そこで、ボタンひとつ押すだけという分かりやすさを提供するユーザーインターフェイスが「ツールバー」である。 ツールバーは、ツールバーコントロールやリバーコントロールなどのコモンコントロールを使用するか、新たに作成することになる。凝ったものはたいがい作成が面倒である。 |
ツールバーコントロール ( Toolbar Control )
「簡単ボタン」 メニュー下に付ける、ボタンの並んだウィンドウ。コモンコントロールの一種。 ツールバーとしての機能を持ち、ボタンが押されると特定のコマンドを実行する。ウィンドウクラスが TOOLBARCLASSNAME のウィンドウでもある。 ツールバーの作成と操作は、 API であれば CreateToolbarEx() や、プレフィックスが TB_ のメッセージを使用する。 MFC であれば CToolBar クラスを使用する。また、最初からツールバー付きのプログラムとして作ることができ、リソースのひとつとしてデザインすることもできる。 現在はリバーコントロールを使用することが多い。 |
通知メッセージ( Notify Message )
メッセージの一種。 ダイアログコントロールにイベントが発生した場合、それを処理するのは難しい。たとえば「マウスの左クリック」というイベントが発生し WM_LBUTTONDOWN が送られたとしても、コントロールには備え付けのウィンドウプロシージャしか備わっていないため、そのメッセージに対しての処理を行うことができないからである。処理を行うためにはウィンドウプロシージャのサブクラス化を行うか、フックをセットする必要がある。が、それは面倒。 そのため、一部のイベントは通知メッセージという形でダイアログのプロシージャへと送られる仕組みになっている。 通知メッセージは WM_COMMAND もしくは WM_NOTIFY として送られる。同時に渡される WPARAM や LPARAM をキャストしたものに実際の通知メッセージが格納されている。 たとえば「ボタンがクリックされた」場合、 WM_COMMAND がダイアログへと送られ、 WPARAM の上位 WORD に通知メッセージの BN_CLICKED が入っている。これを取得することで「ボタンがクリックされた」ということを知ることができる。 MFC の場合、 WM_COMMAND で送られてくる通知メッセージは直接メッセージハンドラを呼び出すため、どのコントロールから呼び出されたのかなど調べる必要がない。また、特定のコントロールと専用のクラス(たとえばエディットコントロールと CEdit )をクラスウィザードを用いて結びつけると、自動的にサブクラス化されるためすべてのメッセージを受け取ることができる。 |
ツリー / 木構造 ( Tree )
木の枝、もしくは根を模したデータ構造。 親子関係を持つもの全体を捉えるため、よく「木の枝」もしくは「木の根」に模したデータ構造がよく使われる。たとえば各要素が「親・最初の子・姉妹」のポインタを持つようにし、その関係に合うようそれぞれの要素がポインタを持ち合うい、ポインタを渡り歩くことで木のような構造を組むことができる。 あるひとつの根( root )を持ち、そこから広がっていくようなものに使われる。その応用範囲は広い。そのため、その木構造を表すためにウィンドウズのダイアログボックスコントロールには「ツリービューコントロール」が用意されている。 |
ツリービューコントロール ( Tree View Control )
「ツリー形式コントロール」 ダイアログボックスコントロールのひとつ。 アイコンと文字列を組としたひとつの要素を、ツリー形式で表示するコントロール。エクスプローラーやフォルダ選択ダイアログなどで使用されている。ウィンドウクラスが SysTreeView32 のウィンドウでもある。 ツリービューコントロールへのアクセスは API であればプレフィックスが TVM_ のメッセージを使用する。 MFC であれば CTreeCtrl クラスを使用する。また、ビューとして使用する場合には CTreeView を使用する。 |
通信
( Communication ) 他の何かとデータのやりとりを行うこと。 通常はネットワークに継ながれた他のコンピューターとデータのやりとりを行うことを指す。この場合、 Winsock 等の通信専用ライブラリを使用し、プロトコルに則ったやりとりを行うことで実現する。 |
定義( Define )
それがどのように動作するかを明示すること。 関数の場合、関数の中身を「関数の定義部」と呼ぶ。通常はソースファイルに書き込む。 しばしばこの単語は実装と同意で使われる。 現在はクラスやテンプレートの存在から、ヘッダーファイルに定義部が置かれる場合も多く、宣言部との境界があいまいになりつつある。 |
ディスパッチ
( Dispatch ) 「送信」 COM インターフェイスが持つメソッドやプロパティの呼び出し方法。 通常、COM インターフェイスへのアクセスはインターフェイスが持つ VTBL を使用する。だが、この方法は COM オブジェクトの中で行われるため、外から動的な関数呼び出しを行うのは難しい。 そのため、 GetProcAddress() を使用するような動的な関数呼び出し(DLL の実行中リンク)を実現する方法が COM にも存在する。これは IDispatch インターフェイスを使用することで実現できる。 IDispatch は、動的にメンバ関数を探し出し、引数を渡し、戻り値を受け取る。これにより、言語による関数呼び出しや型の違いをカバーすることができ、あらゆる環境から COM を使用することができるようになる。反面、この処理をその場で直に行うため、 VTBL に比べて処理が遅くなるという欠点もある。 Visual Basic などはこの方法を使用して COM オブジェクトとアクセスする。当然、ディスパッチを使用してアクセスするには COM ファイルが IDispatch インターフェイスを装備していなければならない。装備しているものをオートメーションと呼ぶ。また、 COM が VTBL とディスパッチの両方を持つことをデュアルインターフェイスと言う。 これとは別に、メッセージループからウィンドウプロシージャへと送信するAPIに DispatchMessage() というものがあるが、この仕組みを「ディスパッチ」という単語で表現することは少ない。 |
ディスプレイ( Display )
主にふたつの意味がある。 ハードウェア:モニターや液晶などの「表示を行うハードウェア」を「ディスプレイ」と呼ぶ。 表示:なんらかの「表示」を行うことを「ディスプレイする」と言う。実際には「 show 」の方がよく使われているのでそれほどこの使われ方は見かけない。 |
ディレクティブ ( Directive )
「指示」 コンパイルの方法を決めるためのスイッチ。 一般にはプリプロセッサを指す。プリプロセッサを使用することで、コンパイル時に「どのようにコンパイルするか」を決定することができる。これにより OS や 開発環境 へと自動的に特化したプログラムとしてコンパイルすることができる。 |
ディレクトリー
( Directory ) 「電話帳」 主にふたつの意味がある。 ひとつは「フォルダ」としての意味。ただし、仮想フォルダ等の「見せかけのフォルダ」はディレクトリと呼ばない場合がある。 もうひとつは「なんとか帳」としての意味。たとえばヤフーのような「インターネットの URL 帳」を「ディレクトリサービス」と呼ぶ。 |
データパイプライン( Data Pipeline )
主にふたつの意味。 ひとつはCPUのパイプラインの一種。機械語の「命令」と「データ」を別々にレジスタへと送ることで高速な処理を行うことができる。そのデータを送る側のパイプ。 もうひとつはデータベース用語。様々な種類のデータベース間でデータをやりとりすることができる接続方法(デバイスとして? プロトコルとして? よーわからん……)。 |
データベース ( Database )
データを蓄え、管理するシステム。 例えば「生徒の名前・身長・体重」のデータをデータベースに書き込むことができる。これらの項目は別々に書き込むことができ、それぞれについてソートや検索が行える。 実際には、既存のデータベースシステムを活用することになるため、まずデータベースシステムを選び、選択したデータベースを操作するための関数やクラスを使用することになる。 API や MFC にも備わっている。 |
テーブル ( Table )
「表」 広い意味を持つ単語。 基本的には「表」を意味することが多い。たとえばストリングテーブルは「文字列の表」である。また、文字コードの変換を行うときに使用する「文字と文字との関連表」を「変換テーブル」と呼んだりもする。 |
デーモン ( Demon )
「神様」 UNIX における常駐アプリケーション。 ログイン・ログアウトに関わらず、 OS が動いている間実行され続けるアプリケーション、もしくはコマンド、実行ファイルのこと。 Windows NT / 2000 ではサービスがこれに当たる。 |
テキストファイル ( Text File )
「文章ファイル」 文字列に変換したデータが書き込まれたファイル。 整数値やビットフラグなどは、メモリの上では分かりにくい形式となっている。この分かりにくい形式を文字列に変換してから書き込んだファイルを「テキストファイル」という。つまり、16進の値としては 1 という値が 0x31 という値に変換されてから書き込まれている。 書き込んだファイルを読み込む場合には、文字コードを使って文字列へと変換してから表示及び使用、もしくはさらに再び整数値等へ変換して使用する。 テキストファイルは、この変換が可能なことが前提となっている。もし変換ができなければそのファイルはバイナリーファイルということになる。しかしながら、この「変換ができた/できなかった」というのは意味的なもの(つまり明確に区別できるものではない)ので、そう考えると「テキストファイルはバイナリーファイルのひとつ」とも言える。が実際にはこのふたつは区別して使用されることが多い。 テキストファイルの拡張子は通常 .txt だが、 .html などを始め、非常に多くのファイルがテキストファイルとして作成されている。この点で、外見ではテキストファイルかバイナリーファイルかの区別はつけられない。しかしながら、テキストエディタ等でそのファイルを開き、中身の意味が分かればそれがテキストファイルである、ということは分かる。 テキストファイルとしての読み書きは、C ランタイムライブラリの場合、 fopen() で「テキスト」のフラグを立て、 fgetc() および fputc() を使用して行う。 API にはテキストモードでの読み書きを行う関数が用意されていない。 MFC の場合には CStdioFile というクラスを使用する。 |
テクスチャー
( Texture ) 「生地」 3DCG において、モデリングした面に貼り付ける画像。 「服の模様」など、モデリングしきれないものを表現するため、面に画像を貼り付けることができる。この画像を「テクスチャー」という。これがないとプラスチックや金属のような質感となってしまうため、リアルな画像を得るためには必要不可欠なものである。 |
デザインパターン ( Design Pattern )
「よく使われる設計」 オブジェクト指向設計を行うときに、繰り返しよく使われるオブジェクト間関係構造。 オブジェクト間の構造は、基本的には継承と、「委譲」などによる他オブジェクトの保持、これらを併用したポリモーフィズム、を用いて形成される。この組み合わせは無限にあるが、実際によく使われるものは少ない。その「よく使われるもの」を一覧化したものが「デザインパターン」である。 狭義としては、 Erich Gamma 氏らによる著書「デザインパターン 〜オブジェクト指向における再利用のための〜」に掲載されている23個のパターンを指す。実際にはこれらを指す場合の方が多い。 |
デスクトップ ( Desktop )
「壁紙ウィンドウ」 画面の一番うしろにある、壁紙のようなもののこと。「マイコンピュータ」や「ごみ箱」などのアイコンが置かれている。 デスクトップはウィンドウの一種であり、ウィンドウクラス名として Program Manager を持つ。この上にウィンドウクラス名 SHELLDLL_DefView のウィンドウがあり、その上に実際に見えているウィンドウが乗っている。この「見えているウィンドウ」はリストビューコントロールというダイアログボックスコントロールとなっているため、同様に操作できる。 このリストビューコントロールの部分はエクスプローラーとなっており、ファイルやフォルダが表示される。これらファイルは「デスクトップ」という特殊フォルダ内のものが表示される。この点で言えば、デスクトップは「特殊フォルダのひとつ」と言うこともできる。 デスクトップの ITEMIDLIST を取得するには、 SHGetSpecialFolderLocation() という API の第3引数に CSIDL_DESKTOP を渡す必要がある。また、この中のファイルとフォルダは、レジストリに登録された一部の特殊ファイル(マイコンピュータやごみ箱等)に【WINDOWS】−【デスクトップ】(通常1バイトカタカナ)内のものを加えたものが表示されている。このフォルダのフルパスは SHGetSpecialFolderPath( ) という API の第3引数に CSIDL_DESKTOPDIRECTORY を渡すことで得られる。 また、「デスクトップ」には実はこれとは別の意味の場合がある。すべてのウィンドウの手前にある仮想的なウィンドウで、ウィンドウハンドルは常に80となっている。このハンドルは GetDesktopWindow() という API を使用することで取得することができる。 |
デストラクタ
( Destructor ) 「自爆装置」 クラス 型変数が破棄されたときに自動的にに呼び出されるメンバ関数。 戻り値のない、クラス名の前にチルダ( ~ )が付いたものと同名の関数は「デストラクタ」と呼ばれ、変数が破棄されたときに自動的に呼び出される。主に様々な後処理を行うために作成される。 デストラクタは必要でなければ作成する必要はない。 作成する場合には、必ず仮想関数として作成すること。 |
デバイス ( Device )
「機器」 コンピューターに継なげる、主に入出力を行うための装置。 いわゆる「周辺機器」のこと。ディスプレイなどの「出力デバイス」を意味することが多い。 直接操作することはあまりなく、通常はデバイスドライバーと API を介して操作する。ただし、 ASPI が使用できる SCSI のように、直接操作できるデバイスもある。 |
デバイスコンテキスト ( Device Context / DC ) デバイスコンテキストとは「出力デバイスとプログラムとの仲介役」である。ここでの「出力デバイス」とは、画像を出力するための機器のことで、主にディスプレイとプリンターを表す。 デバイスコンテキストは7つの GDI オブジェクトを必ず持つ。ビットマップ、パレット、ペン、ブラシ、フォント、パス、リージョンである。これら各 GDI オブジェクトは、1種類につきひとつしか持てない。例えば黒色のペンと赤色のペンを同時に使用することはできない。 デバイスコンテキストもウィンドウズが管理するオブジェクトのひとつであり、ハンドルを介して操作する。そうすることで、デバイスを問わず共通のAPIを使用して描画することができる。 画面に描画する場合、すべてのウィンドウは関連づけられたデバイスコンテキストを持つ。これらのデバイスコンテキストは、デフォルトの GDI オブジェクトを持つ。例えば、そのときデバイスコンテキストが持つビットマップは、ウィンドウに描画されたイメージを格納している。 デバイスコンテキストの取得には API の GetDC() や BeginPaint() を使用し、これらによって得られるデバイスコンテキストのハンドルである HDC を使用してデバイスコンテキストを操作する。また MFCには CDC というクラスが存在するためこれを利用することもできる。 デバイスコンテキストは、あくまで仲介役であることに注意。実際に描画の特性を決めるのは GDI オブジェクトであり、対象のデバイスである。それらを仲介し、ひとまとめにするのがデバイスコンテキストである。 |
デバイスドライバー ( Device Driver )
「機器操縦者」 デバイスを動作させるためのアプリケーション。 ウィンドウズではデバイスへの操作は直接行わない。操作は API に対して行い、それをウィンドウズが受け取る。ウィンドウズは操作対象のデバイスを受け持つ「デバイスドライバー」を呼び出し、命令を渡して処理をしてもらう。 このように、デバイスドライバーと通常のアプリケーションが独立していることで、デバイスを安全に使用することができる。また、 API に対する画一的な処理を行うだけで、様々なデバイスを操作することができる。その一例がデバイスコンテキストである。 デバイスドライバーの作成には専用の SDK である「 DDK 」が必要である。これは Microsoft のホームページからダウンロードできる。 |
デュアルインターフェイス
( Dual Interface ) 「ふたつのインターフェイス」 COM の種類のひとつ。 VTBL と ディスパッチ の両方を持ち、どちらの方法でも使用できるよう設計された COM 。 VTBL を使用することをアーリーバインディング、ディスパッチを使用することをレイトバインディングと呼ぶ。 VTBL を使用することで、多くの部分をコンパイラに処理してもらうことができる。また、ポインタをいくつか渡り歩くだけで処理できるため、ディスパッチよりも処理が早いというメリットもある。 対して、ディスパッチを使用する場合には複雑なメンバ関数の呼び出し処理を行うため処理が遅いというデメリットがある。メリットとして、特定のプログラミング言語に依存しない形式を用いているため、他の言語から呼び出しやすい。 以上のような関係から、 VTBL を使用できる場合には使用し、無理な場合にはディスパッチを使用する、ということが望ましい。 |
デリミタ( Delimiter )
「境界文字」 文字列中の区切りとなる文字。 デリミタは場合によって異なる。たとえばファイルのパスにおいて「各ディレクトリを区切るデリミタ」は \ であり、複数行の文章において「各行を区切るデリミタ」は改行文字 \n であり、通常の文章において「各単語を区切るデリミタ」はスペースである。場合によっては A や 1 などなんでもデリミタになるということである。その場その場でデリミタは異なる。 また、文字列に限らず使われる場合もある。たとえば /* と */ は「コメントデリミタ」と呼ばれている。 |
デュアルシステム( Dual System )
ふたつのシステムを同時に使用する方法。 重要なシステムでは「機能停止」を避ける必要がある。そのための方法のひとつ。 ふたつの同等の能力を持つシステム(インフラ全体のこともあれば、マシン単位、CPU単位の場合もある)を用意し、外部からのデータ入力を両システムに渡し、同じように処理させる。処理した結果を互いに照らし合わせ、もし違いが生じていれば故障しているシステムを停止させ残りのシステムで処理する。 |
テンキーボード / テンキー ( Ten Keyboard )
「電卓キーボード」 0から9までの整数、+などの記号を入力するためのキーボード。 数字を素早く入力するためのキーボード。配置は電卓に近い。電話とは上下が逆なので注意。表計算ソフトを使用する場合には必要となることが多い。キーボードによっては Num Lock キーをオンにしておかないと、カーソルキー等として機能することがある。 フルキーボードの場合、右端に付いている。小型のキーボードや、ノートパソコンの場合には付いてない場合がある。テンキーボードだけのキーボードが発売されているのでそれらを併用することもできる。 テンキーボードと通常のキーボードは、文字コードとしては同じのため、 WM_CHAR で受け取る場合には区別する必要なく処理できる。対して、仮想キーコードとしては別である。通常のキーボードは VK_0 等が送られてくるのに対し、テンキーボードでは VK_NUMPAD0 等が送られてくるため、 WM_KEYDOWN 等を処理する場合には区別する必要がある。この違いに関しては仮想キーコードの変換を参考のこと。 |
テンプレート( Template )「原型」 C++ 言語で使用できる、関数やクラスを使う時に、中で使う特定の「型」を決められるシステム。 たとえば「大きい値と小さい値を入れ換える関数」を作りたいと考えたとする。引数には、 int どうしだけでなく double や CString でも使いたいと考え、でも同じ型どうしの入れ替えのみできるようにしたいと考えた。 これまでは、地道にすべての型の関数を作るか、マクロを使うしかなかったが、前者は面倒であり、後者は型チェックが行われない。 そこで使用されるのがテンプレートである。テンプレートをこの関数の引数に用いることで、すべての型をこの関数に渡すことができるようになる。 注意して欲しいのが、これは決してプログラムの実行時に行われるわけではないということだ。コンパイル時に、テンプレートを、指定された型に置き換えるだけである。だから、型チェックはコンパイル時に行われ、また<や>等の比較演算子を持たない型はちゃんとチェックできる。 つまり、テンプレートとは、安全性が高くそして幅広い使い方のできる、マクロの進化形だということである。事実、これまでマクロに頼っていた部分がどんどんテンプレートに置き換えられつつある。 テンプレートの使用方法は、大きく分けて関数テンプレートとクラステンプレートとがある。 |
テンプレートインスタンス( Template Instance ) 「原型による実体」 テンプレートはただのコードに過ぎなく、書いただけではコンパイルされない。テンプレートを使用したり、明示的な構文を使用したときに、初めてテンプレートはコンパイルされ、機械語のコードとなる。これをテンプレートのインスタンス化と呼ぶ。 インスタンス化されて初めて、関数テンプレートは関数となり、クラステンプレートはクラスとなる。DLLの中に置いたりfriend 指定する場合などにはインスタンス化する必要がある。 インスタンス化されて生成された関数やクラスは、テンプレートとテンプレート引数が同じならひとつのモジュール(実行ファイルや DLL )の中でひとつしか存在しないことになっている。このことからも、テンプレートは普通の関数やクラスを作成するための手段のひとつだということが分かる。 通常のインスタンスという単語とは意味が違うことに注意。「クラステンプレートインスタンス 型のインスタンス」で、前者がこの欄の、後者が「変数」としてのインスタンスということが分かるだろう。 |
テンプレート引数( Template Parameter )
<てんぷれーとひきすう> テンプレートに指定する型。 テンプレートは様々な型に対応したクラスや関数を作成できる。その「型」を指定する部分をテンプレート引数と呼ぶ。クラステンプレートは明示的に指定しなければならないが、代わりにデフォルト型を指定できる。関数テンプレートは明示的にも暗示的にも指定できるが、その分デフォルト型を指定することができず、必ず型を指定しなければならない。 通常の、関数の引数とは別物なので注意すること。 |
テンプレートライブラリ( Template Library ) 「原型辞書」 ライブラリの一種。クラスや関数をテンプレートとインライン関数だけで構成し、定義も実装もすべてヘッダーファイル内に置く方法。使用する側はヘッダーファイルのみを必要とするため便利だが、実装部のコードを書き換えただけでリビルドを必要としたり、普通にスタティックリンクするよりもファイルのサイズが大きくなりやすいなどの欠点がある。 現在テンプレートライブラリにはATLや STL などがある。 テンプレートライブラリはDLLやスタティックライブラリと同時に使用できることに注意。その場合、テンプレートやインライン関数を使用している部分は実行ファイル側に、グローバル変数やテンプレートインスタンスは中間ファイルやDLLの側にあることになる。個人的には、混乱の元となるので奨められない。 |
動画 ( Animation , Movie )
時間と共に変化する画像。目的やサイズによって保存・再生方法は大きく異なる。 カーソルや「ファイルのコピー」時に表示されるものは拡張子が .avi のファイルの動画を表示している。特にダイアログで表示する場合には、ダイアログボックスコントロールのひとつとして「アニメーションコントロール」が用意されており、これを使用することで簡易に表示することができる。 その他のフォーマット(たとえば Mpeg や Real Media 等)の再生や、 .avi の柔軟な再生を行う場合には、基本的に難しい処理を行う必要がある。フォーマットを解析し、低レベル関数を呼び出す必要がある。ただし、いくつかのフォーマットは DirectX に含まれる DirectShow の機能を使用することで表示することができる。また、市販のライブラリやActiveXには表示・変換を行ってくれるものもあるため、必要であれば検討してもいいだろう。 いずれにしろ、元となる「動画ファイル」は、専用のアプリケーションで作成することになる。このアプリのようなことが目的、つまり「1枚1枚の絵を特定の動画フォーマットで保存する」ためには、フォーマットの解析と低レベル関数の使用が必要となる。 1枚1枚の絵があり、それを連続で表示することが目的であるなら、基本的に DirectX の DirectDraw を使用する。使用せずに表示することもできるが、タイマーなどについて留意する必要がある。 |
同期( Synchronization )<どうき> 特定のリソースに対してのアクセスを制限する方法。 マルチスレッドでは、メモリやファイルといったリソースに対して礼儀正しいアクセスを行わない。ふたつのスレッドが同時に「値の書き換え」を行った場合、片方の書き換え中にもう片方が書き換えを開始してしまう可能性がある。あるスレッドが「値の取得>書き換え」している途中に他のスレッドが「値の取得>書き換え」をすれば、ふたつの「値の取得」は同じ値になってしまい後者の「書き換え」の結果が前者の「書き換え」の結果を反映しなくなってしまう。 この問題を防ぐため、特定のリソースへアクセスする場合には各スレッドに順番を守らせることが必要になる。つまりアクセスのタイミングを操作し、最初のスレッドが操作を終了してから次のスレッドが操作を行うようシンクロさせる必要がある。この操作を「同期を取る」と言う。 ウィンドウズでは、基本的にミューテックスやセマフォといった「同期オブジェクト」を使用する。これら同期オブジェクトやスレッドは「シグナル状態」になることができる。これらのハンドルを WaitForSingleObject() 系 API に渡すと、シグナル状態になった時点でこの関数から返ってくるため、この仕組みを使って「順番待ち」を行うことができる。 同期オブジェクトが複数存在し、同期オブジェクトどうしの存在がフラグになっている場合、「互いの同期オブジェクトがフラグの変化を待つ」ことでアプリケーションが停止してしまういわゆる「デッドロック」に陥る場合がある。これはたびたび「確率的」に発生してしまうため、見逃しやすいバグなので注意すること。 |
統合開発環境
( IDE / Integrated Development Environment ) Visual C++ のような、テキストエディタ、コンパイラ、リンカ、デバッガ、プログラム管理機能など、アプリケーション開発に必要なものをすべて持ち、統合的に操作することができるシステム。 現在のアプリケーション開発は、クラス等の使用のため複雑化しつつある。そのため、旧来の make 等を使用した開発では限界がある。そこで、開発用ツールを統合的に管理し操作するためのシステムが必要となった。それが「統合開発環境」である。 現在、パッケージとして販売されているほとんどの「アプリケーション開発ツール」がこの統合開発環境を持っている。 |
|
動的メモリ割り当て( Dynamic Memory Allocation ) 変数の動的生成を実装する場合に必要な処理。 デフォルトの new を使用しない場合、変数を格納するための場所を malloc() などを使用してヒープ上に確保する必要がある。確保するサイズは、これから作成する型のサイズ分だけ必要となる。 確保に成功した場合、確保された場所の先頭ポインタを受け取る。このポインタの型は void *なので、これを型変換して使用する。 つまり、クラスでもなんでも、とにかくそのサイズ分の場所を確保して、それをその型と見なしてしまうのである。とても原始的な方法である。 このポインタを元に、取得した領域の操作を行う。サイズを拡張するときは一度データを他の領域にコピーしてから行う必要があったり、プログラムの終了時にはこれらの動的に割り当てたメモリをすべて解放しなければならなかったりと、管理が面倒になる。また、「どう確保したか」によって「どう解放するか」が変わってくることも大きな問題となる。 これらの処理はバグの温床となりかねないため、あらゆる処置を講じてバグの発生しにくい環境を作るべきである。 GlobalAlloc などは確保方法が違うので注意。 |
ドキュメント( Document )
「文章」 主にふたつの意味がある。 ひとつはドキュメント/ビュー アーキテクチャーの構造の一部。 アプリケーションのデータを格納・管理し、ファイルとの読み書きを行うのが主な目的。そのための機能が充実しており、プログラマーに対してもそういったプログラミングをする事を要求する。 実際には CDocument から継承したクラスの中に、データを格納するメンバ変数を持ち、それらを処理する機能を持たせる。 もうひとつの意味はただの「文章」という意味。「 IShellLink についてのドキュメントを探しています」という文章であれば「 IShellLink についての本や雑誌の記事、ホームページ等を探しています」という意味である。 |
ドキュメント/ビュー アーキテクチャー
( Document / View Architecture ) 「文章・映像構造」 MFCのクラス構造。 MFCは、「アプリケーションの構造は、データを管理するドキュメントと、そのデータを表示するビューの組み合わせによって構成されている」と決めつけている。クラス構造もそれを踏まえたものとなっており、たとえばSDIアプリケーションを作成すると、「ドキュメントクラス」と「ビュークラス」がひとつずつ用意されている。 ビュークラスとドキュメントクラスは1対1もしくは多対1で結びつけられる。 CView::GetDocument() や CDocument::GetFirstViewPosition() を使用することで互いのクラスへアクセスでき、またMFC内部でも頻繁に呼び出されている。このふたつが常に協力して働くような仕組みとなっている。 プログラミング初心者や小さなアプリケーションの開発には役立つが、アプリケーションが大きくなり複雑なクラス構造を構築したい場合には向かない。自由度が低いため、時には大きな障害となりうる。 |
時計 / 時間
( Time ) 現在時刻を知るためには通常C ランタイムライブラリの time() や MFC の CTime 、APIの GetSystemTime() などを使用する。 コンピューター内蔵の時計はいわば「外部デバイス」のため、正確な時間を知るためや厳密な時間計測を行うには不都合がある。そのため、ベンチマークテストやアニメーションのコマ数などは違う種類の関数等を使用する必要がある。 また、しばしば時刻は「 UTC 」を返すため、日本の日時と違う場合がある。この場合には変換を行うか、特定の地域の日時を返す関数を使用する。たとえば CTime::GetGmtTm() は UTC を返し、 CTime::GetLocalTm() は特定の地域の時間を返す。 |
トップレベルウィンドウ ( Top Level Window )
「親なしウィンドウ」 親ウィンドウを持たないウィンドウ。 「トップレベルウィンドウ」は親ウィンドウを持たず、自分が作成した子ウィンドウの管理を行い、タスクバー等で管理される。そのため、プロセスの代わりのように扱われる。 |
ドメイン ( Domain )
「領域」 広義としては「特定の範囲」を意味する。たとえば「処理できないほど大きな数値」が与えた時に、 OS が「ドメインエラー」というものを発生することがある。 狭義としては「ドメイン名」を指す場合が多い。 |
ドメイン名 ( Domain Name )
「領域」 ネットワーク上のコンピューターもしくはサーバーに着けられる名前。たとえば「 kab-studio.com 」など。 ネットワーク上のコンピューターには「IP アドレス」という一意な整数値が与えられている。この IP アドレスは無味簡素でわかりにくいため、この整数値を文字列に置き換えたものが「ドメイン名」である。 |
トラッキング( Tracking )
「追跡」 様々な意味で使用される。 基本的には「動きを追いかける」というもの。 たとえば「ウィンドウサイズのトラッキング」は、ウィンドウの境界をドラッグしてサイズを変更することを意味する。つまり「サイズを変更する」というマウスの動きを「トラッキング」という意味である。 また MFC には CRectTracker というクラスがある。このクラスはウィンドウ上に四角を作成し、マウスの動きを「追跡」して移動やサイズ変更を行う。 またダイアログコントロールの「スライドバー」の別名を「トラッキングバー」と呼ぶ。 これらとは別の意味もある。たとえば音楽の再生なども「トラッキング」と呼ぶ。 |
ドラッグ ( Drag )
「引きずる」 マウスを用いた操作のひとつ。 ボタンを押し、そのままマウスを移動する動作。画面上のアイコン等を移動させるときなどに使用する。通常はボタンを離す「ドロップ」まで行い、ふたつ合わせて「ドラッグ&ドロップ」と呼ぶ。 |
トランザクション( Transaction )
「処理」 データの一括処理を行うこと、もしくは行うサーバー。 データベースとデータのやりとりを行う場合、不用意に書き込むと修正にいくらかのコストが掛かる。そのため、失敗やキャンセルに備えてデータを一時保管し、成功時にまとめて書き込むことが求められる。この一連の処理をトランザクションと呼ぶ。 |
ドロップ ( Drop )
「落とす」 マウスを用いた操作のひとつ。 ドラッグした状態からマウスのボタンを離す操作。画面上のアイコン等を移動させるときなどに使用する。ドラッグと合わせて「ドラッグ&ドロップ」という。 |
名前空間/ネームスペース( Namespace )
主にふたつの意味がある。 ひとつはC++言語の機能のひとつとしての意味。 関数、変数、クラスを問わず、すべてのものに「名前」を加えることができる。たとえば「 std::cout 」は「 cout 」という変数に「 std 」という名前を付け加えたものである。この名前は省略することができ、また何重にも名前を着けることができる。 もうひとつはシェルエクステンションの機能としての意味。 シェルエクステンションはファイルやフォルダ、ドライブを「仮想的」に処理することができる。たとえば、すべてのドライブの上に「マイコンピューター」が、そしてさらにその上に「デスクトップ」があるように。しかし、これらは単なるフォルダであり、「エクスプローラー」がそう見せかけているだけである。この「フォルダを特殊なものに見せかける」機能を名前空間と呼ぶ。 |
名前装飾( Name Decoration )
コンパイル後の関数名に付けられる文字と記号。 プログラム上のただの関数名には、当然引数や戻り値は含まれていない。そこでコンパイラは、コンパイル後の関数名に引数や戻り値の情報をくっつける場合がある。この追加情報を「名前装飾」といい、付けられたあとの関数名を「装飾名」と呼ぶ。 名前装飾は呼び出し規約や extern "C" が付いているかどうかなどによって決定される。 名前装飾はリンク時に大きく関わってくる。リンカはヘッダーファイルに書かれた関数宣言を元に装飾名を作成し、その装飾名から他のソースファイルに含まれる関数を探すためである。つまり、ある関数を使用する場合には、同じヘッダーファイル、同じ宣言を参照する必要があるということである。 この問題は、 DLL 内の関数を動的に呼び出す場合( DLL の実行中リンク)にさらに重要となる。 API の GetProcAddress() の第2引数には、ただの関数名ではなく、装飾名を渡す必要があるからである。 装飾名は、 DUNPBIN といったツールを使用するか、実行ファイルや DLL をバイナリーファイルとして読み込むことで見ることができる。 |
なんとか Alloc
( ... Allocation ) APIの GlobalAlloc() や LocalAlloc() などの関数。 API を用いて動的メモリ割り当てを行う場合に使用するのが、これら Alloc をサフィックスに持つ関数。 ウィンドウズシステム寄りの操作をする場合、これらを用いてメモリを確保する必要がしばしばある。また、実は malloc() などもこれらを使用してメモリ上の領域を確保していたりもする。 ただ、これらの関数はハンドルと Lock 系 API を組み合わせて使用しなければならないため、使用が面倒。コンストラクタが呼び出される new をできる限り使うべき。 |
なんとかビュー
MFC にはダイアログコントロールのいくつかをビュークラスとしたものがある。 Win32に備わっている「ダイアログコントロール」は、通常メッセージとAPIを使用して操作を行う。 これらを便利に使用するラッパークラスとして作成されたのがMFCの「コントロール系クラス」である。 CEdit 、 CListCtrl などがそうである。 さらにこれらのコントロールを「ふつうのウィンドウ」に貼り付けられるようにしたものが「ビュー系クラス」である。 CEditView 、 CListView などがそうである。MFCでは「ドキュメント/ビュー アーキテクチャー」というクラス構造を推奨しており、これらビュー系クラスもそれにのっとったシステムを持っている。 これらビュー系クラスでは C*View::Get*Ctrl() というメンバ関数を使用することで「コントロール系クラス」へのポインタを取得できる。このポインタを介して、実際にビューに貼り付けられているコントロールを操作することができる。 |
なんとか Lock( ... Lock )
APIの GlobalLock() や LocalLock() などの関数。 API を用いて動的メモリ割り当てを行う場合、 GlobalAlloc() や LocalAlloc() といった「なんとか Alloc」系 API を使用するが、これらは new や malloc() と違い、ポインタではなくハンドルを返す。そしてこのハンドルを GlobalLock() や LocalLock() に渡すことで初めてポインタを受け取ることができる。 ポインタとハンドルの、いわばふたつのポインタを使用することになるため混乱の元となりやすい。 malloc() の使用を勧める(もちろん new が使えるのなら new を使うべき)。 VirtualAlloc() はこれとは違う方法を用いる。 |
ニーモニック( Mnemonic )
「記憶術」 一般にはアセンブラで使用される命令単語を指す。 たとえば「この値をレジスタに渡せ」「足し算を行え」などの基本的な命令が揃っている。 ニーモニックは CPU によって数や機能が大きく異なるため、 CPU ごとに憶える必要がある。ただし「 Intel 互換」のようなものであれば基本的には同じ。「基本的には」というのは、たとえば「 AMD Now! 」のような拡張命令が含まれている場合があるからである。 また、このアセンブラの意味とはまったく違う「ショートカットキー」という意味もある。メニューやボタンに表示される下線付きのアルファベットを「ニーモニック」と言う。メニューの名前等に「 & 」とアルファベットを付けることで、自動的に「Altキーとアルファベット」でのショートカットができるようになる。 こちらの方が語源には近いが、この意味で使用されることは皆無。 |
日本語の文字列
文字列は通常 char の配列である。が、 char は1バイトなので到底漢字などの文字を表すことはできない。そこで工夫を凝らして MBCS を使用するか、 char ではなく wchar_t し、 Unicode を使用するかである。 ただし、デフォルトは MBCS を使用するようなっているため、日本語処理は問題なく行える。これはプロジェクトの設定のデフォルトが _MBCS を #define するようになっているからである。 Unicode を使用する場合には、代わりに _UNICODE を立てればいい。 このふたつのフラグによって、 _T の付いた型や _t の付いた関数、そして API が MBCS 用や Unicode 用へと変えられる。 |
ニューメリック
( Numeric ) 「数字」 「数字の」という意味の英単語。通常は整数と実数両方を含んだ意味として使う。 |
ネゴシエーション ( Negotiation )
「話し合い・折衝」 広い意味の言葉。 基本的には、クラスどうしでのメンバ関数の呼び出しあいや、コンポーネントどうしでのメソッドの呼び出しあいや、ウィンドウどうしでのメッセージの送受信など、互いにアクセスし、何かについて調整を行ったりすることを指す。 |
ネスト ( Nest ) 「入れ子 / 巣 / 箱の重ね合わせ / 複文 / 重文」 中カッコ({と})で囲んだ中はひとつの領域と見なされる。これをネストと呼ぶ。通常見やすくするためインデントを行う。 ネストの中で宣言された変数は、そのネストの中でのみ存在できる。また、C 言語では変数の宣言はネストの先頭でしかできない。 C++ 言語であればどこでも可能。 また、ネストの外から見た場合、ネストそのものは「一行」にしか見えないため、 if などの分岐構文に使用される。 ネストの深いコードは流れを追いにくく、画面内に収まりにくくなるため、奨められない。いくつかの関数に分けたり、すぐ return で返すなどすれば、ネストを深くせずに済む。 |
バージョン ( Version )
「〜版」 アプリケーション更新回数。 アプリケーションからバグを取り除いたり新たな機能を加えたりした場合、「更新した」という目安が必要となる。そのときに、たいがい「数字」を用いて「何度目かの更新か」を示す。これを「バージョン」と言う。「ドラゴンクエスト7」の「7」がバージョンを表す。 バージョンを示す数字の付け方は基本的に自由。ただし、表示方法はウィンドウズでは統一されており、メニューの「ヘルプ」−「(アプリ名)について」で表示するダイアログでバージョンを示し、また「バージョン情報」リソースにもバージョンを書き込む必要がある。 |
バージョン情報 ( Version Information )
ウィンドウズにおけるリソースのひとつ。 アプリケーションのバージョンやメーカー名を格納し、アプリケーション内に書き込まれる。エクスプローラー上での右クリックメニューの「プロパティ」で見ることができる。 API の GetFileVersionInfo() を呼び出すことで「バージョン情報」そのものを取得し、そこから VerQueryValue() を呼び出して各項目を取得する。 |
排他処理
( Exclusion ) 「同時1アクセス」 同期処理のひとつ。ファイル等に対し、あるひとつの存在が処理している間は他の存在がアクセスできないようにする仕組み。 ファイルの書き換え中など、今アクセスされると問題となる場合に、他のプロセスからのアクセスを拒否する仕組みを「排他処理」という。 排他処理の方法は場合によって異なる。ファイルの場合には API の CreateFile() で開くときのフラグによって排他処理を行うことができる。また、同期オブジェクトを使用して処理することもできる。 |
バッチ
( Batch ) 「一括処理」 コンピューター上で一連の処理を自動的に行うこと。 たいがいはプログラムの一種。 OS や機能ごとに特別な言語を使用する。処理する内容が書かれたファイルを「バッチファイル」と言ったりする。 ウィンドウズではあまり使用されない単語。ただし、 autoexec.bat など、重要な部分に残ってもいる。 |
バッファ ( Buffer )
「緩衝材」 一時的にデータを格納する領域、または変数、もしくはシステム。 ファイルへとデータを書き込む場合、まず文字列領域へとデータを蓄え、 fflush() が呼び出された時などに一気に書き込む。この「蓄えるための領域」を「バッファ」と言い、こういった処理を「バッファリング」と言う。また「一気に書き込むこと」を「フラッシュ」という。 バッファはデフォルトではシステムが用意するが、 setbuf() を使用して任意の文字列領域に格納するようにしたり、またバッファリングせず直接書き込むようにすることもできる。 バッファの存在理由は、ファイル入出力の場合「逐次書き込みでは時間が掛かる」というものである。アクセスに時間が掛かる対象の場合、バッファを使用してまとめて書き込むことで時間を短縮できる。 よく使われる「バッファ」はこのファイル入出力用のものだが、他のものとして使われる場合もある。 標準C++ライブラリの iostream には「バッファクラス」が用意されている。バッファクラスは「書き込む対象」の前に存在し、データの読み書きを管理する。 また、「一時的に文字列を格納する場所」という意味で、文字列変数に buf のような変数名をつける場合もある。 このように、様々な意味として使われるため注意すること。 |
バイト ( Byte )
コンピューターにおけるデータの単位のひとつ。 コンピューター上のすべてのデータは「ビット」の集まりによって表現される。この「ビット」8桁を「1バイト」という単位で表す。 「1バイト」ならビットが8個集まって表現されていることになり、「2の8乗=256種類」の表現をすることができる。これが unsigned char の格納領域を決定している。 バイトは「変数のサイズ」や「ポインタ値」などを表す場合によく使用される。 一般的に、バイトに関わる部分は OS などによって左右されるため、バイトにこだわったプログラムは組むべきではない。だが、符号、ビットフラグ、バイトオーダーなど考慮しなければならない場合もあるため、知っておくべき。 |
バイトコード
( Byte Code ) 主にふたつの意味がある。 「機械語」:機械語で書かれたプログラムを「バイトコード」とも言う。機械語は単なる整数値のであり、機械語を(アセンブラ表示せず)直接16進数表示したものを特に「バイトコード」と呼ぶことが多い。 「文字コード」:特定の文字コードのことを「バイトコード」という場合がある。通常は前に数字等が付き、「2バイトコード」「マルチバイトコード」などと表記する。 |
バイナリー ( Binary )
「2進の」 素の、16進の状態。 コンピューターの中身(メモリなど)はスイッチのオンオフで構成されているため、2進数で表すことができる。この2進数を4桁まとめて16進数化したものを、表示したりしたものを「バイナリー」という。 これはコンピューターの中身をそのまま表示したものであり、その点で分かりにくい部分もあれば、包み隠されていないという点で分かりやすいという面もある。 また、バイナリーファイルというものもあるのでそちらも参考のこと。 |
バイナリーファイル ( Binary File )
「2進の」 素の、16進の状態で書き込まれたファイル。 整数値やビットフラグなどは、メモリの上では分かりにくい形式となっている。この分かりにくい形式のまま書き込んだファイルを「バイナリーファイル」という。つまり、データの中身、16進の値(バイナリー)をそのままファイルにコピーしたものが、バイナリーファイルということになる。たとえば 1 という値は 0x01 として書き込まれている。 定義上、テキストファイルを除くすべてのファイルはバイナリーファイルである。 メモリ上で変数の境界を区別できないのと同様に、(特別な細工をしない限り)バイナリーファイルの中身でも各値を区別することができない。つまりファイルに「どのような値を書き込んだのか(フォーマット)が分からなければ、そのファイルを解読することはできない。 バイナリーファイルとしての読み書きは、C ランタイムライブラリの場合、 fopen() で「バイナリー」のフラグを立て、 fread() および fwrite() を使用して読み書きする。 API では ReadFile() および WriteFile() を使用する。 MFC の場合には CFile というクラスを使用する。 |
配布( Distribute )
ソフトのコピーを不特定多数へと渡すこと。 通常、形式は問われない。インターネットで公開してダウンロードできるようにしたり、CD−Rに焼いて手渡ししたりする。無償の場合もあれば有償の場合もある。 配布する実行ファイルは「リリースビルド」されたものにする。リリースビルドされたものは、デバッグ用の余分なコードが着いておらず、また最適化がなされている。 また、実行ファイルの他に必要とするファイルも同時に配布する。 DLL や ActiveX などがこれにあたる。実行ファイルが使用している DLL を調べ、一般に広く使われていないものであれば一緒に配布する。ただしこれは再配布が許されている場合である。 ダウンロードの場合には圧縮してアーカイブ化する。それ以外の場合には配布方法に応じて変更する。 理想的にはインストーラーも添付することが望ましい。 DLL のバージョンのチェックやレジストリの書き換えなどを行うためである。 このように、配布には非常に大きな労力が必要となり、また配布後のサポートも必要となる。個人で行う場合には、それなりの余裕と準備が必要となるだろう。 |
パイプ( Pipe ) 「管」 プロセスとプロセスの間で通信を行う方法のひとつ。ファイルへの読み書きと同様の形でデータの送受信が行える。「名前付き」と「名前なし」があり、前者はウィンドウズNTでしか使用できない。 |
パイプライン( Pipeline )「管線」 3Dグラフィックボードでのイメージ処理工程。変形、位置調整、表示などの機能はそれぞれ別になっており、それらはパイプラインによって継ながれている。アプリケーションから送られたデータはパイプラインを通ることでそれらの処理を行われ、モニタ上に表示されることになる。 また、これは感覚的には「行」のパイプラインだが、「列」のパイプラインもある。 CPU 内で特定の命令を処理する場合、その処理ひとつに対して「読み込み」や「実行」など多くの手順を踏む必要がある。これらの手順を一括して行わず、各手順を分け、順番に並べて流れ作業的に行う。その一連の流れを「パイプライン」と言う。この分担作業により、 CPU の高速化が図られる。 いわゆるパイプとは違うことに注意。 |
配列( Array )
同型の変数をメモリ上に連続して並べた変数。 char ch[128]; とすれば、 char 型の変数が128個並んだ状態でメモリ上に確保される。並んだ中の特定の変数(これを「要素」と呼ぶ)を指定する場合には ch[8] のように添字演算子( [] )と要素番号(中の数字)を使用する。ただし番号はゼロから始まるためこの例では「9番目」の要素を指定していることになる。 添字演算子および要素番号を除いたもの( ch )は、先頭の要素へのポインタ( &ch[0] )となる。 配列は文字列の格納や多次元データの格納など幅広く使われているが、他の変数に比べ特殊な使われ方がされることやサイズを容易に変えられないことなど使い勝手の悪さも目立つ。そのため、現在は同等の機能を持つクラス、たとえば MFC なら CArray のようなコレクションクラスや CString のような文字列クラスが代わりに使用される場合が多い。しかしながら、 STL のアルゴリズムやイテレーターの存在により、配列や配列のような操作が見直されつつもある。 |
バインディング( Binding )
「結び付け」 様々な意味を持つ言葉。 C++言語では演算子の優先順位を指す。 「DLLのリンク方法」を指す場合もある。この場合、実行時リンクを「事前バインディング」、実行中リンクを「実行時バインディング」という。 また、バインドの名詞形として使われる場合もある。 |
バインド ( Bind )
「結びつけ」 何かに何かを結びつけること。 「何か」とは、通常は変数どうしである。たとえば、フォルダを操作するためのCOMインターフェイス IShellFolder に、特定のフォルダを指し示す ITEMIDLIST に結びつけることができる。これが「バインド」である。 通常は、結びつけたからといって「ひとつになる」わけではない。一方は「元のものに別のものがくっついた状態」、もう一方は「そのままの状態」となる。通常は前者の「くっついた状態」の方を操作する。前述の例なら、 IShellFolder には ITEMIDLIST がバインドされ、それによって操作することができる。 ITEMIDLIST の方は変化がないため、こちらは新たに何かができるようになるということはない。 |
|
パス ( Path )「道」
特定のファイルの位置を示す文字列。 たとえば C:\Windows\MFC42.dll というファイルであれば、 C:\Windows がパスである。このようにパスは基本的に「ドライブとフォルダ」を示すが、しばしばファイル名も含む意味として使われる場合もある。 また、「ドライブ・フォルダ・ファイル名」すべてを含む文字列を「フルパス」と呼ぶ。フルパスは特定のファイルを一意に得ることができる。 実行ファイル自身のパスの取得には GetModuleFileName() という API を使用する。 これとは別に、作図等に使用する曲線も「パス」と呼ぶ。ウィンドウズではGDIのひとつとなっている。 |
派生 ( Derive )
あるクラスから継承を行って新しいクラスを作成すること。 元になるクラスを基底クラス、新たに作られたクラスを派生クラスという。 単語の用法としては「Aを継承してBを作る」「Aから派生してBを作る」と、微妙に視点が違うことに注意。でも基本的に「継承」と「派生」は同じ意味と考えてよい。 |
|
パターン ( Pattern )
「模様、原型」 色々な意味を持つ言葉。基本は「繰り返し」という意味。 ペンや塗りつぶしに使う、「柄」の入ったブラシを「パターンブラシ」という。 正規表現などで、ある文字が繰り返し使われているか調べることを「パターンマッチング」という。 クラスの設計で、よく使われる特定のクラス構造を「デザインパターン」という。 |
パディング
( Padding ) 「詰め物」 構造体のアライメントを整えたときに、構造体内の各メンバ変数の間に生まれる無駄な領域のこと。もしくは、アライメントを整えるために挿入する、使用しないダミーのメンバ変数のこと。 |
パレット( Palette )
「色配列」 色のデータを格納するデータ。通常、インデックスナンバーを持つ配列になっている。 ビットマップ(ここでは「ドット配列データ」としての意味)がカラーの場合、当然色のデータも保持する。いわゆる「フルカラー( True カラー)」と呼ばれるものの場合、1ドットにつきRGB各8ビット、合計24ビットを色データとして持たなければならない。この場合、画像の幅や高さが増すとファイルサイズも大きく増えることになる。 ファイルサイズを抑えるため、いくつかの画像ファイルの形式では「パレット」を持つ。画像に使われている色を集め、もしその数が多いのなら似た色をまとめて減らし(これを「減色」という)、配列として格納する。各ドットには対応する色の入った配列のインデックスが格納され、画像を表示するときにはインデックスから色を参照して画像を表示する。 また、ウィンドウズの画面そのものもパレットを持っている。これを「デスクトップパレット」と呼ぶ。このパレットは「画面のプロパティ」で設定された色数を持つ。 このパレットは、すべてのウィンドウの色を表示する必要があるため制約が存在する。タイトルバーやメニューを描画するための色も持っており、当然これは変更できない。デスクトップパレット中のこれらの色の部分を「システムパレット」と呼ぶ。 |
半角カタカナ / 半角カナ
文字の一種。 通常日本語の文字列は2バイトサイズになるが、半角カタカナは1バイトで表される。文字コードとしては、 Shift JIS の 0xA0 から 0xDF までの範囲に当たる。 この範囲は、文字コードの自動判別を行う場合に邪魔になるなど問題があるため、使用を控えた方がいいとされる。 |
半角文字
「はんかくもじ」 アルファベットや数字、半角カタカナ等の文字。 1バイト文字の古い呼び方。最近は正式なドキュメントではあまり使用されない。現在使用する場合には、半角と対にして使用するか、半角カタカナを指す場合に使用する。 |
ハンガリー記法 / ハンガリアン記法
( Hungarian Notation ) 「ウィンドウズ一般変数命名法」 Charles Simonyi という人考えた命名規則。この人がハンガリー人なので「ハンガリー記法」と呼ばれる。 この変数命名法はウィンドウズ API で使用されている。変数名の頭に変数の意味を表すプレフィックスを付けるもので、例えば整数なら n 、 long pointer なら lp 、文字列なら sz となっている。必ずしも型名ではないことに注意。 現在のC++言語にはそぐわないとされる反面、 API として使用されていることもあり広く知られてもいるため、現在は「亜流ハンガリー記法」とでも言えるものがまさにプログラマーの数だけ存在している状態。他言語の記法との関係もあり、この混沌はさらに続くと思われる。 |
ハンドラ ( Handler ) 「操るもの」 「何か」が起きた時に呼び出される関数。その「何か」に対処(ハンドリング)する実装を持つ。通常、特別な構文はなく、意味的なもの。 通常、ハンドラ関数はプログラマーが作り、デフォルトのものと置き換え、「何か」が発生したときに自動的に呼び出される。よって、プログラマーが直接呼び出すことはない。 例外ハンドラのような「関数ポインタを渡す」ものと、 MFC メッセージハンドラのような「仮想関数やマクロを使用する」ものが主なハンドラ。 |
ハンドル
( Handle ) 「取っ手」 ウィンドウズオブジェクトへのポインタの総称。 ウィンドウズのオブジェクト、たとえばウィンドウやアイコンなどは、ウィンドウズが管理しておりアプリケーションが直接操作することはできない。代わりにこれらのオブジェクトへの特別なポインタ型、たとえば HWND や HICON を API に渡すことでウィンドウズに操作してもらう。このポインタ型のことを「ハンドル」と呼ぶ。 MFC の CWnd などは、これらハンドルのラッパークラスであり、ハンドルをメンバ変数として内部に持っている。そのため、実際にハンドルを使用する機会は少ない。 また、しばしばポインタそのものの別名として「ハンドル」という単語が用いられる場合があるため注意すること。 |
ビット ( Bit )
「ちょびっと」 コンピューターにおけるデータの最小単位。 コンピューター上のすべてのデータは「ビット」の集まりによって表現される。ひとつのビットは「0」と「1」のふたつの情報を持つことができる。 一般に「32ビット」と呼ばれる場合ならこのビットが32個集まって表現されていることになり、「2の32乗=4294967296種類」の表現をすることができる。これが unsigned int の格納領域を決定している。 一般的に、ビットに関わる部分は OS などによって左右されるため、ビットにこだわったプログラムは組むべきではない。だが、符号、ビットフラグ、バイトオーダーなど考慮しなければならない場合もあるため、知っておくべき。 |
ビットフラグ ( Bit Flag )
「ビットの旗」 ビットの仕組みを使ったフラグ。 32ビット整数値なら当然「32個のビット」が含まれている。このビットひとつひとつを「0と1」のフラグにすることで、32個の設定を含めることができる。これを「ビットフラグ」という。 フラグが立っているかどうかの判定には、ビット演算子を使用する。 & や | などのことである。通常は、ビットフラグを含む変数と、特定のビットを示す整数値(当然2の乗数となる)でビット演算子を挟むことで判定する。 同様に、ビットフラグとなる変数に対して、特定のビットを立たせる場合にも、ビット演算子と特定のビットを示す整数値を組み合わせて使用する。 この関係については「離散数学」や「論理回路」といった分野の勉強を行っておくと役立つだろう。と言っても簡単なパズルの問題なので、それほど気合いを入れる必要もないだろう。 |
非同期 ( Asynchronization ) <ひどうき>
同期を取らないこと。 「常にたったひとつがアクセスする必要がある」場合、同期を取る必要がある。もしその必要がなければ、同期を取る必要はない。同期を取らない、つまり同時に複数の存在が同時にアクセスする状態を「非同期」という。 一般には、非同期の方が同期に比べて処理が早く終わるため、非同期で構わない場合には非同期の方がよい。 |
ヒープ( Heap )
「雑然とした積み重ね」 メモリ領域のひとつ。 動的生成した変数が格納される領域のこと。通常の変数はこれとは別の場所(スタック)に保存される。 動的生成された変数は「いつ作成されいつ破棄される」か分からないため、あらかじめ大きな領域をメモリ上に取っておき、その中から割り当てていくことになる。そのための領域を「ヒープ」と呼ぶ。 |
ビープ( Beep )「信号音」
「ぴー」や「ぶー」などの電子音。 昔のコンピューターにはまともな音源が乗っていなかったため、単純な1音を鳴らすのが精一杯だった。その1音が「ビープ音」である。通常は、警告や通知のために鳴らす。 一番手っ取り早く鳴らす方法は、 printf( "\a" ); とすることである。エスケープシーケンス \a はビープ音を鳴らす。ただし、ウィンドウズではコンソールアプリケーションでないと機能しないので注意。 API に Beep() という関数がある。WinNT ではビープ音が鳴る(らしい)。Win9x では、「一般の警告音」として指定された WAV を鳴らす。 |
比較( Compare / cmp )
C言語では「変数どうしの比較」が難しい。たとえば文字列は、そのままではポインタのため比較できない。 比較方法にはいくつかある。まず専用の関数を使う方法。Cランタイムライブラリには strcmp() という関数がある。 独自のクラスを使用する場合には演算子のオーバーロードを用いることができる。これにより、通常の演算子で関数を呼び出すことができる。 いくつかのライブラリでは、比較を行う専用のオブジェクトを渡す場合がある。Cランタイムライブラリの qsort() は、ハンドラ関数へのポインタを受け取る。また、 STL の set 系クラスは、比較用の「述語関数クラス」を受け取り、このクラスを用いて比較をする。 |
引数( Parameter )
<ひきすう> 関数に渡す値。 関数が処理を行うための「事前情報」としての値を送る必要がある。計算機に数字を打ち込まなければ計算できないのと同じである。その打ち込む数字に当たるのが、引数である。 具体的には、 void Func( int x ) とあれば x が「引数」である。 引数は新しい変数として作成され、呼び出し側から渡された値をコピーする。構造体などサイズの大きい変数や、特別なクラスのためコピーできない場合、さらに引数を使って値を返してもらう場合にはポインタや参照を使用する。 テンプレート引数とはまったくの別物。 |
非終端記号 ( Nonterminal Symbol )
「一意な単語」 他の単語に置き換えうる単語。 基本的には「正規構文」の用語だが、正規構文を用いて文解釈を行うコンパイラの用語としても使用される。 「プログラムをコンパイルする」とは、コンパイラがプログラムを読み解くことを意味する。特定の構文規則(これが C++ 言語等にあたる)にのっとりプログラムを解釈し理解する。このとき、各文や各単語は「一意に意味が決定する単語」と「他の単語の別名になっている単語」の2種類に分かれる。前者は const などのキーワード、後者は typedef された型などである。 このうち、後者、 typedef された型のような「他の単語の別名になっている単語」を「非終端記号」と呼ぶ。コンパイラはこの単語を見たとき「何に置き換えられた単語か」を探し、置き換えようとする。他の単語に置き換える余地がある、という点で「非終端」である。 非終端記号は全て「元となる単語」に置き換えられ、最終的には置き換えることのできない単語、「終端記号」へとすべて置き換えられる。この時点で初めて、コンパイルが可能となる。 |
ビッグエンディアン( Big-Endian ) モトローラ系CPUのバイトオーダー。 たとえばint i = 0xFEDCBA98;とした場合、実際のメモリ上にそのまま「 FEDCBA98 」と格納するもの。頭の中で考えやすい素直な方法。ちなみに「素直でない方法」のことをリトルエンディアンと呼ぶ。 ビッグエンディアンは「 MSB First 」とも呼ばれる。 ちなみに「エンディアン」という単語はない。 Jonathan Swift 作「ガリバー旅行記」という本の中で、卵を食べるときに「尖った方( Little-End )」から割る人々と「丸まった方( Big-End )」から割る人々が存在し、この両単語に「〜人種」という意味のサフィックス「 ...ian 」を付けて生まれた「 Big-Endian 」「 Little-Endian 」という造語が作中で使われている。 これらの単語を、昔のコンピューター技術者が拝借したというのが定説である。 |
ビットマップ( Bitmap ) 基本的にみっつの意味で使用される。 まずひとつは「デバイスコンテキストの色マップ」である。デバイスコンテキストはいわゆる「キャンバス」としてビットマップを持つ。このビットマップはペンやフォントと同じくGDIオブジェクトのひとつであり、ハンドルを使用してウィンドウズを介することで管理することができる。 ビットマップは「メタファイル」と区別されて言われる場合もある。メタファイルは点や線のデータとして画像を保持する、いわゆる「ベクトルデータ」である。これと区別する意味で、ドット配列のデータ形式の画像をすべてビットマップと呼ぶ場合がある。 また、ビットマップは「画像ファイル形式」という意味で使われる場合もある。この場合、拡張子が bmp の画像ファイルのことを言う。色数や圧縮度など、様々なフォーマットが存在する。 すべてに共通するのは、ビットマップは指定サイズのドット配列を持ち、そのドットひとつひとつが色情報を持つということである。色情報はパレットを使用するものとTrue colorを使用するものとがある。 それ以外はまったく違うと言っていいし、またこの共通部分のフォーマットも違う。3つの意味を混同せず、それぞれの形式を把握し、確実に変換することが大切である。 |
ビュー( View )
「画像」 ドキュメント/ビュー アーキテクチャーの構造の一部。 ビューとは「処理した結果を表示する」機能を持つウィンドウのことである。ドキュメントの内容を元に表示を行う機能をプログラマーは加えることになる。 実際には CView から継承したクラスの中に、データを表示する機能を持たせる。 表示方法は通常、デバイスコンテキストを用いて直接書き込む。他に、あらかじめ用意された CView 派生クラス、なんとかビューを使用することもできる。これを使用すると、ツリーコントロールなどのダイアログコントロールを使ってデータを表示することができる。 |
ヒューマンインターフェイス
( Human Interface ) 「人間接触面」 人間とコンピューターとが触れあい関わり合う部分。 ユーザーインターフェイスとほぼ同意。コンピューター用語としては「ユーザーインターフェイス」の方がよく使用される。 |
|
|
|
ビルド
( Build ) 「構築」 Visual C++ の機能のひとつ。「アプリケーションの作成」を実行するコマンド。 make の代わりとなるもので、プロジェクトの設定を元にコンパイラを呼び出して各ソースファイルをコンパイルし、作られたオブジェクトファイルをリンカに渡しリンクさせ、実行ファイルや DLL を作成する、という一連の処理を行う。 実際には NMAKE が実行されている。 |
ファームウェア ( Firmware )
「基本デバイスドライバ」 デバイスの中に組み込まれた、そのデバイスを操作するためのプログラム。 デバイス(周辺機器)を操作するのはデバイスドライバだが、実際にはデバイスドライバが直接デバイスを操作するわけではなく、デバイスに命令が送られ、その命令を元にデバイスが自分自身を動かす、ということが多い。この「自分自身を動かす」ときに使用されるプログラムが「ファームウェア」である。 |
ファイバ ( Fiber )
「繊維」 スレッドの極小版。 「ファイバ」はスレッドよりも軽く小さい実行単位である。ただし、スレッドと違い、自動的なプリエンプションが行われないため、「どのファイバをいつ動かすか」という管理をプログラム側で行う必要がある。 ファイバの作成・管理等は API の CreateFiber() 等を使用する。 Windows95 では使用できない。 |
ファイル
( File ) ディスク上のデータの単位。 通常、ハードディスクや CD-ROM 内に作成され、データが保存されている。メモリと違い、電源を切っても消去されない。 実行ファイルやヘッダーファイルなどもファイルの一種。 プログラムからファイルへのアクセスはファイル操作を参照のこと。 実際には標準入出力やメモリ上のデータなど、様々なものが「ファイル」と同等に扱えるようになっているため、抽象化された「データの塊」として解釈される場合もある。 |
ファイルサイズ
( File Size ) ファイルの中に含まれているデータの総量。 たとえば、ファイルの中にたった1文字 A のみが入っているのならば、これは1バイトサイズなのでファイルサイズも1バイトとなる。 ファイルサイズを知る方法として、 API の GetFileSize() を使用するか、ファイル入出力と同じようにしてファイルを開き読み書き用ポインタを終端まで移動させて位置を取得する方法がある。 ファイルサイズが大きい場合、メモリやハードディスクの容量を奪い、通信ではコピーに時間が掛かるというデメリットが生じるため、ファイルサイズはできるかぎり小さい方が良い。 実行ファイル等の場合、プログラム中の無駄な部分を省いたり、各実行ファイルで使用する共通部分を DLL にすることでファイルサイズを小さくすることができる。 |
ファイルスコープ
( File Scope ) 「ファイル内グローバル」 スコープの範囲のひとつ。あるひとつのソースファイル内のみからしかアクセスできないスコープ範囲。 実行ファイル等の作成には通常、プログラムを複数のソースファイルに分割し、各ソースファイルをコンパイルしてからそれをリンクしてまとめるという工程を取る。 ソースファイル内にのみ書かれた変数および関数は、そのソースファイル内でしか使用できない。この「スコープがファイル内に限られる」ことを「ファイルスコープ」と言う。 変数の場合、普通にグローバル変数を作成するとこのファイルスコープを持つことになる。そのため、一般に「グローバル変数」と言うと「ファイルスコープを持つ変数」を指す場合もある。真の意味での「グローバル変数」を作成する場合には、ヘッダーファイルにて extern 指定する。もちろん、ファイルスコープを持つ変数も、真のグローバル変数もできる限り作成すべきではない。 関数の場合、定義部のみを作成すればファイルスコープを持つ。宣言部をヘッダーファイルに置くと、ファイルスコープを失いあらゆるソースファイルから使用することができるようになる。それを防ぐためには static 関数として宣言する。内部処理を行うため外から呼ばれるべきでない関数などは、このファイルスコープを持たせることが有効となる。 |
ファイル操作 ( File Operation )
ファイル操作には主にふたつの種類がある。 「読み書き」は、ファイルに対してデータを書き込んだり、書き込まれたデータを読み取ったりする操作を指す。これについては「ファイル入出力」を参照のこと。 「コピー・移動・削除」は、その名の通りファイルを他のフォルダへコピーしたり移動したりする操作を指す。 これは API の CopyFile() 系を使用する。こちらには、間接的に使用するライブラリは存在しない。 「列挙」は、フォルダにあるファイルの一覧を取得することを指す。これについては「ファイル列挙」を参照のこと。 |
ファイル入出力 ( File In / Out )
ファイルに対して、データを読み取ったり書き込んだりする操作。 これはC ランタイムライブラリの fopen() 系、標準 C++ ライブラリの iostream 系、 API の CreateFile() 系、 MFC の CFile 系、など方法が多数ある。テキストファイルおよびバイナリーファイルも参照のこと。 ただし、ファイル操作はハードウェア寄りの操作のため、実際には API でしかアクセスできない。他のライブラリは、この API を間接的に使用している。 |
ファイルポインタ ( File Pointer )
FILE 構造体へのポインタ。 C ランタイムライブラリでのファイル入出力に使用する。通常 fopen() などで取得し、 fprintf() などに渡すことでファイルへの操作を行う。操作後は fclose() に渡してファイルポインタを放棄する。 ポインタと言うよりは、ファイルを識別するためのハンドルと考えた方がいいだろう。ただしれっきとしたポインタなので、 FILE 構造体のメンバへのアクセスも当然できる。 間違えやすいが、ファイルを識別するための整数値「ファイルハンドル」というのも別にあるので注意。これは _fileno() などを使用してファイルポインタから取得するが、アンダーバーが付いているように標準関数ではないので使用は勧めない。 さらに API の CreateFile() などを使うばあいには、ただのハンドル HANDLE を使用する。これもファイルポインタとは違うので注意。 これらとはまったく別に「ファイルのどこに読み書きをするか」を指し示すポインタも「ファイルポインタ」と呼ぶ。 |
ファイルマッピング( File Mapping )
特定のファイルをメモリ領域に格納すること。メモリマップトファイルとも言う。 特定のファイルをメモリ上に置くことで、読み書きが早くなる。ただしスワップファイルの関係から実メモリの空きが大きい場合のみに限る。 また、このメモリは特定のプロセスの領域に含まれないため、すべてのプロセスから同時にアクセスすることができる。元のファイルが存在しない状態でいきなりメモリ上に作成することもでき、プロセス間通信を目的とする場合にはこの「特定のファイル」を用いない場合が多い。アクセスの方法は、ファイルとしてではなくポインタを介して行う。 API の CreateFileMapping() でファイルマッピングを用意し、 MapViewOfFile() でメモリ上にあるファイルの先頭ポインタを取得する。同様の方法で他のプロセスもこのポインタを取得できる。こうすることで複数のプロセスから特定のデータへと同時に読み書きすることが可能になる。 もちろん書き込みを同時に行う場合にはマルチスレッドと同様の状態となるので同期を取る必要がある。 MFC には CMemFile というクラスがあるが、仕組みはまったく別。C ランタイムライブラリの malloc() 等による動的確保したメモリ領域で確保した領域に、ファイルを扱う CFile というクラスと同様の方法で書き込むことができる。扱いはこちらの方が簡単だが、当然、他のプロセスからはアクセスできない。 MFS はファイルシステムそのもののことであり、フォルダ以下をまとめてメモリ上に置くことである。これとは行うことは同じだが方法や用途は別と言える。 |
ファイル列挙 ( File Enumeration )
フォルダの中に含まれているファイルとフォルダの一覧を取得すること。 ディスク内のファイルやフォルダの構造は OS によって異なるため、それぞれの OS 専用の API を用いなければファイルの列挙はできない。 ウィンドウズの場合、 API なら FindFirstFile() および FindNextFile() を使用することで取得できる。 MFC なら CFileFind というクラスを使用することで取得できる。 |
フィールド
( Field ) 「場」 非常に広い意味を持つ単語。 一般的なプログラミング用語としては「何かを書き込む場所」という意味を持つ。 特にデータベース用語としては、列、つまり特定の種類の項目を指す。 |
フォーカス ( Focus )
「焦点」 ダイアログコントロールがキー入力を受け付けられる状態。 ダイアログボックスには通常複数のコントロールが貼り付けられているが、同時にキー入力を受け付けられるのはそのうちのひとつである。その「入力を今受け付けられるコントロール」を「フォーカスを持つコントロール」と呼ぶ。 フォーカスを持つコントロールの取得には GetFocus() という API を使用する。また特定のコントロールにフォーカスを持たせる場合には SetFocus() という API を使用する。 |
フォーマット( Format )
「形式」 主に3つの意味がある。 「データの構造」としてのもの。たとえば「拡張子が .aaa のファイルのフォーマットは、最初4バイトがデータインデックス、以降4バイトごとにデータとなっている」のように使われる。 「書式化」としてのもの。 CString::Format() や CTime::Format() は、数値を文字列に変換する。 「ディスクに対するコマンド」としてのもの。ディスク上のセクタを分割し直し、まっさらな状態に戻す。 つまり「あるものを、決まった形式にする」ことを「フォーマット」と言う。このように色々な意味で使われるので注意。 |
フォルダー ( Folder )
「紙ばさみ」 ファイルをまとめる特殊なファイル。ディレクトリと同意。 大量のファイルがそのままディスク上に置かれた場合、整理が大変になってしまう。そこで「フォルダ」という「ファイルを格納するための特殊なファイル」を作ることができ、そこにファイルをしまうことができる。 フォルダの中にフォルダを作ることができるので、ディスク全体はツリー形式となる。フォルダの中のファイルを一意に示す場合にはフルパスを使用する。 フォルダはファイルの一種のため、たいがいのファイル操作はフォルダに対しても行うことができる。フォルダの作成は API の CreateDirectory() か CreateDirectoryEx() を使用する。また、フォルダ内のファイルの列挙についてはファイル列挙を参照のこと。 |
フック( Hook )
「釣り針」 ウィンドウズのメッセージ処理などは、 OS 内に隠蔽されているため通常直接の操作を行うことができない。そこで、この OS 上のメッセージの流れに横から割って入るシステムがウィンドウズには備わっている。それが「フック」と呼ばれるシステムである。 フックは SetWindowsHookEx() を使用してフックプロシージャをセットすることで行う。「フックプロシージャ」はコールバック関数の一種で、ウィンドウプロシージャのようにウィンドウズシステムに登録し呼び出される関数のことである。 フックをセットすれば、特定のメッセージがフックプロシージャへと送られてくる。送られるメッセージの種類やその内容は、セットされたフックのタイプによって変わってくる。 また、フックには「ローカルフック」と「システムフック」がある。ローカルフックは自プロセス内でのみ機能し、システムフックはそのとき実行中のすべてのプロセスで機能する。使い道はシステムフックの方が圧倒的に高い。 システムフックを使用することでメッセージ処理を分かりやすくしたり、他のアプリケーションのメッセージを横取りしたりすることができるが、使用を誤るとウィンドウズシステム自体に悪影響を与えかねないので注意が必要。 |
フッター
( Footer ) 「足下」 基本的な意味としては、「下部」を指す。ヘッダーと対になる単語。 一般には、ワープロアプリケーション等での「ページ数表示部分」、つまりページの一番下の部分を指す。 プログラミングでこの用語が使用されることは少ない。「ヘッダー」と対になる単語ではあるが、「フッター部に情報が入っている」ようなフォーマットはあまり存在せず、また「ヘッダーファイル」はあっても「フッターファイル」は存在しない。 |
フラグ / フラッグ
( Flag ) 「旗・標識」 印となるもの。 どちらかと言うと業界用語のひとつ。特定の変数を、普段は0にしておき、何かが起きた時に1へと変えたときに「フラグを立てた」などと言ったりする。この特定の変数が「フラグ」となる。 アドベンチャーゲームなどで「核心を突いた会話をして妙な音楽が流れた」場合に「フラグが立った」などともいう。 C++言語プログラミングでは、 bool 型やビットフラグがフラグとして使用される。 |
|
プラットフォーム
( Platform ) 「壇上」 一般には「あるソフトウェアを使用することができる OS 」を指す。 広義としては、 OS だけでなく CPU などのハードウェア面も含めての「あるソフトウェアの動作環境」を指す。一般的には「ある OS が動作するハードウェア環境」は特定されるため OS と同じ意味と捉えて問題ないが、場合によっては特別なハードウェア環境が必要な場合もあるため注意する必要がある。 |
フリーストア ( Free Store )
「貯蔵庫」 デフォルトの new が確保するメモリ領域。 変数の動的生成を行う場合、 new を用いて変数を新たに生成する。このとき変数を置くために確保されるメモリ領域のことを「フリーストア」と呼ぶ。 通常、フリーストアはヒープ領域を指す。 new 演算子がオーバーロードされている場合、メモリの確保はそのオーバーロード関数が行う。この場合、どの領域に確保されるかはその関数の実装によるため、この場合には「フリーストアに確保された」とは言わない。 実際の所、最近は「フリーストア」という単語はあまり使われていない。 |
|
プリエンプション / プリエンプト
( Preemption / Preempt ) 「横取り」 プロセスが実行中でも、その実行を一時中断し、他のプロセスに実行権を渡すこと。 Windows 3.1 などの古い OS は、あるプロセスが実行されると、そのプロセスがコンピューターの処理能力を独占してしまう。そのため、そのプロセスが終了することなく機能停止してしまうと、他のプロセスは実行することができなくなってしまう。 そこで、 Windows 9x / NT / 2000 などの OS では、ひとつプロセスが実行される時間(タイムスライス)を決め、その時間が来ると実行を中断し、他のプロセスに実行権を渡す、というシステムとなっている。この「中段と実行」を「プリエンプション」と言い、プリエンプション機能を持つ OSを「プリエンプティブ マルチタスク OS 」と呼ぶ。 |
|
プリコンパイル
( Precompile ) 「事前コンパイル」 Visual C++ の機能のひとつ。あまり変更されないプログラムをあらかじめコンパイルしておくことで、ビルドにかかる時間を短縮する機能。 MFC など滅多に変更が行われないプログラムは、ビルドごとにコンパイルすると無駄な時間を消費する。そこで、そういったプログラムをあらかじめコンパイルしておき、リンクする時に必要な部分だけを取り付けるという方法が取られる。この「あらかじめコンパイル」することを「プリコンパイル」と言う。 実際には、この指定は「プロジェクトの設定」ダイアログボックスにて各ソースファイルに対して指定を行う。各ソースファイルに対して「あるヘッダーファイルまでの全プログラムをプリコンパイルするか」、もしくは「あるヘッダーファイルまでプリコンパイルされたものを使用するか」を選ぶことができる。 プリコンパイルされたファイルを「プリコンパイル済みヘッダーファイル」と呼ぶ。拡張子は .pch 。 MFC などの巨大なライブラリをプリコンパイルしている場合には、ファイルサイズは大きくなる。 |
プリプロセッサー ( Preprocessor )
「事前処理」 コンパイル前に行う処理用の単語。 たとえば #define や #include などのこと。 # で始まり、改行で終わる。セミコロン( ; )は必要ない。実際にはC++言語とは「別の言語」と言える。 これらはコンパイルの直前にプログラムを書き換え、その書き換えられたものがコンパイルされる。 プリプロセッサを使用することで「簡単に単語を置き換えられる」「開発環境の差をカバーできる」などのメリットが得られる反面、無理矢理置き換えるためバグの温床となりかねない。特に関数形式のマクロはできる限り使用・作成しないようにすること。 |
フレームウィンドウ( Frame Window )
MFCにおけるウィンドウの種類のひとつ。 ウィンドウを作成する場合、「全体のウィンドウ」と「描画部分だけのウィンドウ」とのふたつを作成する場合がある。この「全体のウィンドウ」をMFCでは「フレームウィンドウ」と呼んでおり、 CFrameWnd クラスで管理する。 ちなみに「描画部分」を「クライアント」と呼び、MFCではこのウィンドウをビューと呼んでいる。 フレームウィンドウでは、メニューの処理やウィンドウサイズの管理を行い、ビューウィンドウでは描画やクリックに対する処理を、のように分けて処理できることがメリット。 |
プリンター ( Printer )
「印字機」 周辺機器のひとつ。主に文字や絵を紙に出力する機能を持つ。 プリンターへの出力にはデバイスコンテキストを使用する。ただし、通常の画面と違い、スプールや解像度、色の違いなどについても考慮する必要がある。 |
プレースホルダー ( Place Holder )
「代理」 あるものの「とりあえずの代理」。通常、それは他のものへと置き換えるためにある。 たとえばウィンドウプロシージャなど、多くのコールバックの関数名は「プレースホルダー」である。ウィンドウプロシージャの関数名は、一応 WindowProc となっているが、プログラム時には好きな名前にして構わない。関数ポインタとしては、引数と戻り値さえ合っていれば問題ない(つまり WNDPROC として渡せさえすれば問題ない)からである。が、 API としては便宜上の名前を付ける必要があり、そのため WindowProc という関数名をとりあえず付けている。こういった「とりあえず付けられている名前だが、実際は勝手に変えてよい」ものを「プレースホルダー」と呼ぶ。 |
フレームワーク
( Framework ) 「骨組み」 巨大なプログラムの元となるライブラリ。 非常に強固なクラス間の関係を持つライブラリ。このクラスを直接的に使用する、もしくはそれらのクラスから継承することで使用する。こうすると、わずかなプログラムで巨大なクラスライブラリを使用でき、高機能アプリケーションを作成できる。 MFC を初めとする多くの GUI ライブラリはフレームワークとして構成されている。 フレームワークはライブラリ全体を簡単に使用できる反面、フレームワークが規定する使用方法を超えることができない。自由度が非常に低く、汎用性に劣るため、「フレームワーク嫌い」なプログラマーも増えてきている。 |
プレフィックス ( Prefix )
「接頭語」 変数名や関数名、型名の先頭に付ける文字。 例えば MFC のクラスは、 CWnd 、 CString など、すべて C が先頭に付いている。この C のように「先頭に付ける文字」をプレフィックスという。 プレフィックスは「何らかの情報」を示すために付けられる。たとえば「メンバ変数であることを示す」ために、変数名に m_ というプレフィックスを付けることがある。 プレフィックスは「見た目では分からない情報」を付加することで可読性を増させるが、名前が冗長になりすぎたり、その情報が変更されたときに変数名を書き換える必要があるなどの問題もある。 「末尾につける」ものをサフィックスという。 |
ブロードキャスト( Broadcast )
「放送」 特定多数もしくは不特定多数に対して送信すること。 送信するものは場合によって異なる。ネットワークならパケット、ウィンドウならメッセージを一斉に多数の相手へと送信する。 また、多数の相手へと送ることのできるチャンネル・経路のことを示す場合もある。たとえば特定のネットワーク上すべてに送信することができるIPアドレスを「ブロードキャストアドレス」と呼ぶ。 あと、通常の「放送」、つまりテレビやラジオなどの意味を持つこともあるので注意すること。 |
プロキシー / プロクシ ( Proxy )「代理人」 この単語は様々な部分で登場する。 ネットワークでは、ネットワーク上で他のサーバーの代わりに見せかけるサーバーを、「プロキシーサーバー」と呼ぶ。「ファイアウォール」を使用しつつ内外のアクセスを可能にしたり、データの一時保存を行ったり、クライアント側のダミーとして使用する。しばしば「串」と呼ばれる。 プログラミングでは、特定の関数やクラスにアクセスする場合に、間に「仲介役」となるクラスや関数を挟むことがあり、この「仲介役」を「プロキシークラス」等呼ぶことがある。これは一般的にはラッパーと呼ばれることが多いと思われる。 デザインパターンでは、この「ラッパー」のシステムが「プロキシーパターン」としてパターンのひとつになっている。 |
プロシージャ( Procedure )「手続き」 「プロシージャ」という単語には、ふたつの用いられ方があり、これを混同しないことがまず大切である。 Visual Basic や、 Delphi などで使われている Pascal といったプログラミング言語では戻り値のない関数という意味で使われる。 ウィンドウズプログラミングにおいては、まったく違う意味で用いられる。ウィンドウズにおける「プロシージャ」とは、メッセージを処理するためにウィンドウズから呼び出されるコールバック関数のことである。 プロシージャはプログラマーが作る関数であるが、引数や戻り値はAPIとしてあらかじめ決められている。そして、その作製した関数は、いくつかの方法を用いて関数ポインタをウィンドウズに登録する。ユーザーのアクションなどによってイベントが起きると、ウィンドウズはプロシージャにメッセージを送信する。そのとき、プロシージャとして登録された関数が呼び出される。引数には、そのメッセージと各種パラメーターが渡されるはずである。 登録方法はみっつある。 ウィンドウクラスの登録時に、そのウィンドウに送られてくるメッセージを処理するためのウィンドウプロシージャを登録する必要がある。 登録後も、サブクラス化という技法を用いてプロシージャを任意に入れ替えることができる。 また、フックという技法を用いれば、あるプロシージャに送られるメッセージを先に送らせるプロシージャを登録することができる。 重要なのは、プロシージャは自分のプログラムから呼び出すための関数ではないということである。この部分はウィンドウズのイベントドリブンなプログラムの中での特徴的な部分と言えるだろう。 |
プロジェクト ( Project )
「計画」 広義には「ソフト開発を行う計画」のこと。 Visual C++ では「特定ファイルの開発を行うまとまったファイル群」として使用される。ひとつのアプリケーションの作成にはさまざまなファイルが必要であり、これをひとつにまとめ、適切な処理を行うのがプロジェクトである。「特定ファイル」とは、主に実行ファイルや DLL を指す。プロジェクトを元にこれらのファイルの作成を行うことをビルドと言う。 拡張子が .dsp のファイルが「プロジェクトファイル」であり、この中に各種設定が書き込まれている。一般に makefile と呼ばれるものの Visual C++ 版と言える。この場合 make に当たるものがビルドでありそれによって呼ばれる NMAKE である。 プロジェクトはワークスペースにひとつ以上格納されている。 |
プロセス( Process )
「処理」 実行されたアプリケーション、もしくはその情報が格納されたメモリ領域。 たとえばスタートメニューの「ファイル名を指定して実行」で NOTEPAD.EXE を3回実行した場合、「メモ帳」のプロセスが3つ作成される。この「実行されたアプリケーション」をプロセスと呼ぶ。 プロセスはスタックやヒープ領域をすべて包むメモリ領域(ページ)を持ち、その中に変数を抱え込む。また、スレッドをひとつスタートさせ、アプリケーションのコードを施行する(コード自体は再利用のため違うメモリ領域に確保されている)。 スレッドが終了するとプロセスが保持していたメモリ領域をすべて開放し、プロセスは終了する。これが「アプリケーションの終了」である。 プロセスはモジュールもしくはインスタンスと呼ばれる場合があり、プロセスを識別するためのハンドル HINSTANCE 型がある。ただし、インスタンスハンドルはデフォルトではすべて 0x00400000 であるため、これによってインスタンスを識別することはできない。これは、インスタンスハンドルがベースアドレスそのものであり、実行ファイル等の設定によって決定される値であるためである。 インスタンスハンドルとは別に、プロセスには整数値の識別ナンバーが付いている。これを「プロセス ID」と呼ぶ。 プロセスはウィンドウとはまったく関係ないことに注意。プロセスはウィンドウを生成しないこともできればトップレベルウィンドウを複数作成することもできる。そのため「いまあるウィンドウの実行ファイルはどこか」などは少し複雑な仕組みが必要なことに注意。 |
プロセスID ( Process ID / PID )
「プロセス識別番号」 プロセスひとつひとつに付けられた整数値。 プロセスひとつひとつには、それぞれ違う割り当てられている。これが「プロセスID」である。各プロセスを識別する必要がある場合に、この整数値を使用する。 プロセスIDは CreateProcess() などの API を呼び出すときに渡す構造体 PROCESS_INFORMATION の dwThreadId というメンバ変数に格納されている。また、 GetWindowThreadProcessId() で、特定ウィンドウを作成したプロセスのプロセスIDを取得することができる。 |
プロセス間関数呼び出し
ネットワークを介しての分散処理やプログラムのコンポーネント化などでは、プロセスが他のプロセスの中にあるクラスや関数を呼び出すことが必要となる。 このとき、実装されている関数と、関数を呼び出す部分とに整合性がなければ呼び出すことは当然できない。外から呼び出せるようになっている関数は、言ってみれば「コネクタ」が外に飛び出しているようなものである。当然、そのコネクタにあったコネクタを継なげなければならない。 この「同じコネクタを継なげる」ということは想像以上に難しい。一見同じような関数宣言のように見えても、コンパイラの違い、言語の違い、 OS の違いによって「違う関数」と見なされてしまう可能性があるからである。 int 型のサイズや「参照渡し」の微妙な違いが、関数の「コネクタ」を変形させるのである。 こういった違いをなくし、統一的に呼び出すための仕様が CORBA や RPC 、であり、それを使用するCOMであったりする。 「外から呼び出される」DLL や実行ファイルを作成する場合、関数の宣言部が書かれたヘッダーファイルを IDL と呼ばれる特殊な言語で書き換える。これは言語の依存性をなくすためである。次に IDL コンパイラを使用してコードを生成する。こうすることによって、関数は「統一的仕様」に則った形でエクスポートされる。 このようにして作成されたDLLや実行ファイルは、様々な言語や開発環境で作成されたアプリケーションから呼び出せる。また、この仕様は OS に依存しないため、ある OS のアプリが別の OS のDLLを呼び出すこともできる。このような「コネクタ」の仕様が CORBA や RPC であり、逆に言えば内部の動作については全然関係ない。 |
ブロック構造
( Block Structur ) 「塊の塊」 部分部分が「塊(ブロック)」としてまとめられ、それが入れ子構造となって全体が構成されている、そういう構造。 C 言語で書かれたプログラムは典型的なブロック構造である。 { と } で囲まれた部分(ネスト)がひとつのブロックとなり、このブロックがより大きなブロックに含まれる形でプログラムが形成される。 |
プロトコル ( Protocol ) 「規約」 ネットワーク間でデータを送受信するための規格。 まず送受信の方法として TCP と UDP のどちらかひとつのプロトコルを選ぶ。 さらに目的にあわせて「相手を操作するコマンド」としてのプロトコルを決める。自分で勝手に決めてもいいが、通常は FTP などの既存のプロトコルを使用する。この既存のプロトコルの多くは文字列の受け渡しで機能を実行するため、実際にはコマンドの一覧と考えていい。 |
プロトタイプ
( Prototype ) 「原型」 C++ 言語プログラミングにおいては関数宣言と同義語。「関数のプロトタイプ宣言」のようによく使用されるが、これは「関数の宣言部」と読み替えた方が分かりやすいだろう。 一般的には、「公開前のテストバージョン」のプログラムを意味する。 |
プロパティ( Property )「属性・特性」 オブジェクトが持つデータ。C++言語のクラスではメンバ変数と呼ぶ。 例えば「ファイル」であれば、作製日時やサイズが「プロパティ」ということになる。 オブジェクトそのもののデータ、例えば「ファイル」であれば「ファイルパス」などは、プロパティに含まない場合もある。が、基本的にこのふたつには明確な違いはない。 ただし、アクセス制御がPublicのデータを特に「プロパティ」と呼ぶことが多く、内部に隠蔽されたデータは呼ばれないことがほとんどであるため、オブジェクトが持つすべてのデータがプロパティというわけではないことに注意。 |
プロパティシート( Property Sheet )
ダイアログの種類のひとつ。 プロパティシートに分類されるダイアログは「タブコントロールを上に持ち、タブを変更するとその下のダイアログの中身も変化する」というもの。ダイアログボックスコントロールのひとつでもある。 APIでは PropertySheet() を、 MFC では CPropertySheet を使用する。 基本的に「プロパティ」とは別物。だが、ファイルなどの情報を表示する「プロパティ」ダイアログはこの「プロパティシート」を使用している。 そして、シェルエクステンションを利用することでファイルなどの「プロパティ」に任意にページを追加することができる。このページもしくはシステムのことも「プロパティシート」と呼ぶことがある。 |
プロファイル ( Profile )
「横顔」 広義には、 OS の状態を表すもの、もしくはその状態にするための設定を指す。 Visual C++ における「プロファイル」は、実行ファイル内の関数を一覧表示する機能を指す。このとき、関数名は装飾名が使われる。 |
分岐予測 ( Branch Prediction )
「条件判断結果辞書」 CPU の機能のひとつ。分岐命令の結果を保存し、それを元にパイプライン処理を行うもの。 パイプライン処理を行う場合、分岐命令(条件判断命令、プログラム上での if や for 、 while のこと)の結果が重要な問題となる。分岐命令の結果が出るのは、パイプライン上の最後の方にある「実行」部門である。この結果によって「次に実行される命令」が変わるため、結果によってはパイプライン上の「実行」以前の段階にあるすべての命令を破棄しなければならなくなる。これによってタイムロスが生じてしまう。破棄を避ける場合にも、分岐命令の結果が出るまでパイプラインに命令を送れないため、これもタイムロスとなる。 そこで、一度行われた分岐命令の結果を保存しておき、その結果を元に「今度の分岐命令の結果もこうだろう」と予測して、その予測を元に「次に実行される命令」を決定してパイプラインへ送る方法が取られている。この方法を「分岐予測」という。 for や while などのループ系は「分岐命令の結果が連続して同じ」場合が非常に多いため、この方法は非常に有効となる。 |
|
ページ違反 ( Page Fault ) 「領域侵犯」 メモリ領域の塊を「ページ」と呼ぶ。ページはプロセス毎に取得され、他のプロセスのページ(のメモリ領域)にはアクセスできない。無理矢理アクセスしようとしたとき、この例外が発生する。 通常は「無効なポインタ」を使用しようとしたりした場合に発生する。 |
ベースアドレス
( Base Address ) 「基準アドレス」 あるアドレスを決定するための「基準」となるアドレス。 あるアドレスを指定する場合に、「大まかな基準となるアドレス」と、「細かなアドレス」を足し合わせて取得する場合がある。このとき、「基準となるアドレス」を「ベースアドレス」と言う。 ただし、使用する場面によって微妙に意味が異なるため注意が必要。 配列の場合、配列そのものを指すアドレスが「ベースアドレス」、添え字 * 要素のサイズが「細かいアドレス」となり、各要素のアドレスはこのふたつを足したものとなる。 プロセスが持つアドレス全体の底上げをする「ベースアドレス」も存在する。実行ファイルおよび DLL は、実行される前にメモリ上に読み込まれ、読み込まれたファイルの内容は機械語コードとしてのプログラムとして認識され、その先頭アドレス(=ベースアドレス)から実行される。そしてその後のアドレスに、アプリケーションが使用する変数などを格納する領域(スタックやヒープ)が用意される。 Visual C++ では、デフォルトで実行ファイルのベースアドレスは 0x00400000 、 DLL は 0x10000000 となっている。デバッグ時にメモリを見ると、これ以前のアドレスは ? となっていることが分かる。また、このベースアドレスの値は API の GetModuleHandle() によって知ることができる。つまり、ベースアドレスとはインスタンスハンドルそのものであるということである。ベースアドレスのデフォルト値を変更する場合には、 /base オプションで、もしくは【プロジェクトの設定】ダイアログの【リンク】−【アウトプット】ページの【ベース アドレス】で設定できる。 このイメージは、ウィンドウズのような仮想メモリを使用している場合のものである。仮想メモリを使用していない OS の場合、同じ仕組みであれば同じ領域に複数の機械語コードを上書きしてしまうことになる。そこで、仮想メモリを使用しない OS では、各プロセスで異なるベースアドレスを使用する。これにより、機械語コードや変数領域が競合することなく同時に使用することができる。実際には、仮想メモリを使用している OS も、その内部ではこのようなことをしている。 また、これとは別に、メモリモデルが far の場合のセグメントを「ベースアドレス」と呼ぶ場合もある。 |
ベクター / ベクトル
( Vector ) 「矢印 / 配列」 主にふたつの意味がある。 「矢印」:いわゆる「ベクトル」のこと。始点座標と終点座標のみのデータを持つ。 3DCG 等でよく使われる。 「配列」:配列のことを「ベクター」とも言う。実際、標準 C++ ライブラリには std::vector という配列として使用するためのクラスがある。 |
ベストエフォート型( Best Effort )
「最善の努力」 ネットワークの種類のひとつ。 「確実な送受信が期待できない」ネットワーク。データの欠落が発生したり突然途切れたりし、完全にデータを送受信できることが保証されていないこと。インターネットなどがこれにあたる。 これに対し、直接PCどうしを継ないだときなど、確実に送受信できる場合のことを「ギャランティ型」と呼ぶ。 |
ヘッダー ( Header )
「頭部」 特定のデータの最初に設けられる情報部。 画像や音声など、特定のフォーマットを持つファイルのほとんどは、データの前に「データの情報」を格納する部分を持つ。これを「ヘッダー」という。「チャンク」とも言われる。 特定のファイルフォーマットを処理する場合には、まずこのヘッダーからデータを読み取り変数へと格納することから始めるのが良い。 これとは別に、ヘッダーファイルを略してこう呼ぶ場合もある。 |
ヘッダーファイル( Header File )
拡張子が .h または .hpp のファイル。 他のソースファイルやライブラリがコンパイルした関数を使用する場合、その関数の引数や戻り値の情報(これをシグネイチャーと呼ぶ)や、引数に使われる構造体の情報が必要になる。これらの情報が書き込まれたものが「ヘッダーファイル」である。 通常実際に関数がコンパイルされたときのヘッダーファイルと同じものを使用することで、整合性を取る。また、これらは同じソースファイル内でも必要となる場合がある。 テンプレートやインライン関数は通常ヘッダーファイルに書き込むため、C++言語ではヘッダーファイルにソースファイルの役割が分担される傾向にある。 |
変数の動的生成
通常の変数では実現できないことを実現したい場合、変数を動的生成する。通常は new や malloc() などを使用する。動的生成された変数はヒープに格納される。 関数から出てもなくならない変数や、可変長配列、クラスファクトリーを用いたポリモーフィズムを使用するときなどには「生成と破棄を任意に行える変数」が必要になる。この場合に「動的生成」を行う。 C++ 言語の場合、コンストラクタとデストラクタを呼び出す必要があるため必ず new と delete を使用する。 C 言語の場合、もしくは new や delete のオーバーロード関数を作る場合、 malloc() などを使用して動的にメモリを割り当て、それを特定の型と見なして使用する。 |
ベンダー
( Vendor ) 「商人」 物を売る人、もしくは会社。 たとえば「ソフトウェアを販売する会社」を「ソフトウェアベンダー」と呼ぶ。 |
ベンチマークテスト
( Benchmark Test ) 「水準点」 コンピューターの動作速度を調べるためのテスト。 コンピューターの、 CPU や 3DCG ボード、特定のプログラムが「どれだけ速いか」を調べるためのテスト。通常は専用のアプリケーションを用いて数回計測し、それを統計化して調べる。ベンチマークテストをプログラムで行う場合には、処理の開始時と終了時に時間を計測して、その差を取って経過した時間を使用する。 ウィンドウズのように、プロセスが複数実行されるマルチタスク環境や、複数のアプリケーションがインストールされ DLL の関係が複雑化している OS の場合、不確定要素が非常に多いため、ベンチマークテストと同じ結果が他の環境でも可能とは限らないため、あくまで目安と考えるべきだろう。 |
ポインタのポインタ
( Pointer to Pointer ) あるポインタ型変数があるとき、その変数のアドレスを格納するためのポインタ。 書式は int ** ppi と、 * をふたつ付ける。 主にふたつの使用目的がある。 「アドレスを受け取る」:関数を呼び出しその引数で値を受け取る場合、変数のアドレスを渡して、関数内部でそのポインタを通して変数へと値を格納する。この「値」が「アドレス」だった場合、ポインタのアドレスを渡して、関数内部でそのポインタを通してポインタへと値を格納する。このように「関数の引数でアドレスを受け取る」場合に、ポインタのポインタを使用する。この使用目的では「ポインタのポインタのポインタ」は使用しない。 「2次元配列」:2次元配列をポインタで表す場合に使用する。2次元配列を「配列の配列」と考える事で、それをポインタのポインタに置き換えることができる。個の場合、3次元配列では「ポインタのポインタのポインタ」を使うことになる。 |
ポート( Port )
「港」 ネットワーク接続時に各プロセスへと付けられるIDナンバー。 インターネットやFTPクライアントなどのネットワークへと接続するアプリケーションは、実行されたプロセス毎に整数値のIDナンバーを割り当てられる。これをポート番号と呼ぶ。 この番号によって通信を行うため、同時に複数のプロセスを実行できる。複数のインターネットブラウザがさまざまなURLからファイルをダウンロードできるのは、それぞれのブラウザが異なる番号を持ち、互いを識別しているからである。 FTPなどの標準的なものは、すでにポート番号がRFCによって決められている。独自の番号を割り当てる場合には1024以上の任意の値を使用する。 |
ポーランド記法
( Porland Notation ) 数式の記述方法のひとつ。 通常の数式計算では 1+ 2 と書くところを、「ポーランド記法」では + 1 2 と記述する。つまり「 演算子 左辺 右辺 」と並ぶ。この記述法は「常に2項演算を行う」というルールに則っている。そのためカッコを省くことができ、 2 * ( 3 + 4 ) を * 2 + 3 4 と記述できる。 一般には「逆ポーランド記法」の方が有名。これは、逆ポーランド記法の方がスタックを利用して簡単に処理できるためである。そのせいか、場合によっては「ポーランド記法」という単語が「逆ポーランド記法」を意味する場合もある。 |
|
ポスト( Post )
「投函」 何かを送ること。 ウィンドウズの「メッセージ」の送信方法には「 SendMessage() 」と「 PostMessage() 」のふたつがある。 SendMessage() が「メッセージが処理されるまで戻らない」のに対して PostMessage() はメッセージをメッセージキューに入れたらすぐに戻ってくる。そのことからも、「ポスト」には「自分ではなく何かに送ってもらう」という感がある。 また「ポスト」には「後ろ」という意味があり(「P.M.」の「P」)、 i++ のような後置インクリメントを「ポストインクリメント」と呼ぶ。 |
ボタンコントロール ( Button Control )
ダイアログボックスコントロールのひとつ。 通常の四角いボタン、チェックボックス、ラジオボタンなどの「押される」機能を持つコントロール。ウィンドウクラスが BUTTON のウィンドウである。 |
ホットアイテム
( Hot Item ) 「選択物」 現在選択しているもの。 たとえばメニューやツールバーのボタン等の中で、マウスカーソルを重ねているもののこと。実際には、これにより「色形が変わる」ものを指すことが多い。 |
ホットキーコントロール ( Hotkey Control )
「キー入力コントロール」 ダイアログボックスコントロールのひとつ。 外見はエディットボックスコントロールに似ているが、文字列ではなく「押したキー」が表示される。たとえば「CTRL + A」のように。このコントロールはショートカットキーの指定等に使用される。 ホットキーとは別物なので注意すること。 |
ホットトラッキング
( Hot-Tracking ) 「常時追尾」 マウスカーソルの位置に常に対応すること。 たとえば、インターネットブラウザ( IE やネットスケープ等)で、リンクの上にマウスカーソルを持っていくと、マウスカーソルの形状が変わり、またリンクの色が変わったりツールチップやスタイルシートが表示されることがある。こういった「マウスの動きを監視し、今ある位置に合わせて反応すること」を「ホットトラッキング」と言う。 |
ポリモーフィズム ( Polymorphism ) 「多相性、多態性」 あるクラスへのポインタが、継承先のクラスのように振る舞うこと。 仮想関数を使用すると、各クラス型変数は自分が使うべき関数へのポインタを持つ。そのため、そのクラスへのポインタをアップキャストしても、常に同じメンバ関数を使用することができる。 そのため、同じ継承元のポインタ、同じメンバ関数を使用していても、最初に作成したクラスが違えば呼び出されるメンバ関数が変わることになる。つまり、ひとつのポインタが様々なクラスとしての面を見せることができることになる。この機能はオブジェクト指向プログラミングにとって不可欠なもののひとつといえる。 |
マージ ( Merge )
「合併」 ふたつの「データの塊」をひとつにまとめること。 配列などに入ったふたつの「データの塊」を、何らかの方式でひとつの「データの塊」にまとめることを「マージする」と言う。 |
マーシャリング( Marshaling )
「案内」 COM 用語のひとつ。通常呼び出すことのできない関数を呼び出す方法。 DLL 、つまり「インプロセスサーバー」内にあるCOMオブジェクトを使用する場合、関数ポインタや COM インターフェイスポインタはそのまま問題なく呼び出せる。 しかし、このようにうまくいく場合はまれである。他プロセスにあるポインタには直接アクセスすることはできないため、実行ファイル、つまり「アウトプロセスサーバー」の場合には直接ポインタを使用できない。また、 DLL の場合でもアパートメントスレッドとして実行されている場合には直接アクセスする許されないため、関数呼び出しをメッセージの送信として変換する必要がある。さらにネットワーク上の他のPCに置かれた COM インターフェイスを使用する場合には、引数の呼び出し方法の統一などさらに多くの問題がある。 これらの問題を解消し、問題なく関数や COM インターフェイスを呼び出せるようにすることを「マーシャリング」と呼ぶ。この実装は、APIを使用するか、 COM インターフェイスを IDL と呼ばれる言語で記述し MIDL コンパイラを通すことで行える。また、マーシャリングを行うための COM インターフェイス IMarshal も用意されている。 |
マイドキュメント( My Documents )
IE4やWin98ほどから作られるようになった特殊フォルダのひとつ。 desktop.ini を持ちシェル拡張によって特殊化され、「ごみ箱」などと同様レジストリに登録されている。 ユーザーが作成したファイルを置くためのフォルダだとしての活用が奨められており、最近のアプリケーションは「開く」ダイアログで最初にこのフォルダを開くものが多い。コンピューターに慣れているユーザーにとってはいい迷惑だが、ファイル管理にまだ慣れていない初心者ユーザーの作成したファイルを飛び散らせないという目的では役立っている。 このフォルダのフルパスは SHGetSpecialFolderPath( ) という API の第3引数に CSIDL_PERSONAL を渡すことで得られる。 |
マウスカーソル / マウスポインタ
( Mouse Cursor / Mouse Pointer) 「カーソル」 マウスによる入力の位置を指し示す、矢印の絵。「カーソル」と呼ばれることもある。 マウスカーソルはウィンドウズオブジェクトであり、 CreateCursor() などの API を使用して操作する。 MFC には操作するためのクラス等は用意されていない。 一時的に表示する「砂時計」カーソルは、 API の場合には LoadCursor() に IDC_WAIT を渡して砂時計カーソルへのハンドルを取得し SetCursor() で交換する。 MFC の場合には、 CWaitCursor というクラスなどを使用することで簡単に実現できる。 |
マクロ ( Macro )
「大きい」 広義には「おおざっぱなプログラム」を意味する。「スクリプトより大まかな感じ」といった感じだろうか。 狭義には「プリプロセッサを使用した関数もしくは型」を意味する。また、関数や型に限らず、「プリプロセッサを用いて明示的にプログラムを置き換える」場合にも呼ぶ場合がある。 この「狭義」のマクロについては、できる限り使用・作成をするべきではない。マクロは非常に広範囲に渡って影響を及ぼす可能性があり、無理矢理プログラムを書き換えてしまうため、バグの温床となりかねない。と言っても、過去の資産では非常によく使われているため、「使わないで済ませる」のはほぼ不可能と言ってもいい状態でもある。 マクロの代わりとして typedef やテンプレートが用意されているため、こちらを使うこと。 |
マジックナンバー
( Magic Number ) 「絶対的数値」 主にふたつの意味がある。 「絶対的な数字」:何らかの意味を持つ、他に変えることのできない値を「マジックナンバー」と言う。 「リテラル整数」:プログラム上に直接書かれた値、つまり「リテラル整数」を「マジックナンバー」と言う場合がある。これは、上記の「変えられない値」がリテラル整数として書かれることが多いことから来ている。 |
マジックファイル / マジックナンバーファイル
( Magic File / Magic Number File ) 「ヘッダー情報」 UNIX 系において、ファイルの種類を判別するためのファイル。 特別なフォーマットを持つファイルは、通常特別なヘッダーを持つ。このヘッダーを調べることで、そのファイルがどのフォーマットに準拠したものか判別することができる。 この「特定のファイルフォーマットを判別するための情報」が「マジックファイル」である。マジックファイルはフォーマットを表現するための特別な書式でテキストファイルとして記述される。これが file コマンドに渡されることで判別される。 |
マッピング( Maping )
「関連づけ」 非常に多くの意味として使用される単語。 「テキストマッピング」は、文字コードを変えることで文字列処理がローカライズされるようにすること。このように、状況に合わせて「何らかの関連づけ」を行うという意味がある。 「メッセージのマッピング」は、メッセージハンドラを決める「マップ」を作成すること。このように単に「マップ」の名詞形として使われる場合もある。 |
マップ
( Map ) 「地図 / 図表」 広い意味を持つ言葉。 基本的には「平面に描かれた図表」を指す。ビットマップなどがこれに当たる。 「平面に貼り付ける」という意味で使用される場合もある。ファイルマッピングがこれに当たる。 辞書のことを「マップ」と呼ぶ場合もある。 MFC の CMap や STL の std::map 等がこれに当たる。 |
マルチスレッド( Multi Thread ) スレッドをプロセス内で2つ以上作製すること。 また、作成されたスレッドは、メッセージループを持つものをユーザーインターフェイススレッド、持たないものをワーカースレッドと呼ぶ。 |
マルチタスク
( Multi Task ) 「1度に多実行」 1度に多くのアプリケーションが実行できること、もしくはできる OS 。 Windows 9x / NT / 2000 等の OS は、プリエンプション機能によって各スレッドがわずかな時間ずつ実行されるようなシステムとなっている。これにより、各アプリケーションは平行実行することができる。このような機能を「マルチタスク」という。 「タスク」は一般には「プロセス」と同じ意味として使用されるが、基本的には「1処理単位」という意味を持っており、そのため「マルチタスク」という用語となっている。 |
ミッションクリティカル( Mission Critical )
「重要任務」 失敗した場合多大な損害を被る処理。 たとえば内部機密情報の管理や高額株式の売買など、問題があってはならないような処理のことを「ミッションクリティカル」、もしくは「ミッションクリティカルな業務」などとと呼ぶ。 これらの処理を行うサーバーは、堅牢であり鉄壁であり何重ものバックアップを施されており、何らかの問題によって処理が滞ることを防いでいる。 そのために、時間及び金銭的投資を行う必要がある場合が多い。 |
ミューテックス( Mutex / MUTually EXclusive ) 「相互排他」 マルチスレッドやマルチプロセスで使用する同期オブジェクトのひとつ。 CreateMutex() などのAPIによって作製、削除される。システムグローバルなオブジェクトのため、すべてのスレッドからアクセスできる。 ミューテックスは「同時にたったひとつのスレッドだけが所有できる」という機能を持っている。言わばリレーのバトンのようなものである。この機能を使用することで同期を取ることができる。 また、機能としてはこれだけのシンプルな存在なので、このオブジェクトの存在自体をフラグとする場合もある。 「複数起動の阻止」によく使われるため、同期オブジェクトの中では最も有名な存在。 |
命名規則 / 名前付け基準 ( Naming )
変数や関数、クラス等の名前を着けるときの規則。 プログラミングでは、変数の型や種類によって、変数名を変えることが多い。その変えるための「法則」を「命名規則」と言う。 ウィンドウズではハンガリー記法が主流だが、C++言語や Java ではまた違う命名規則に則っており、さらにライブラリごとにも異なる場合が多い。 実際には「どれが読みやすい」という点については個人差があるため、どの命名規則がいいということは一概には言えない。ただ、ひとつのプログラム、ひとつのプロジェクト内で命名規則を統一することは重要な意味を持つだろう。 |
メソッド( Method )「方法」 オブジェクトに取り付けられた関数。 C++ 言語のクラスではメンバ関数と呼ばれる。 オブジェクトは構造体に似たデータを持つ。データはオブジェクトごとに量も質も何もかも違う。ひとつひとつが違う「特性」、つまりプロパティを持つ。 そのため、オブジェクトが持つデータの処理も、オブジェクトひとつひとつ変わってくる。そこで、オブジェクト自身にデータの振る舞い方を決めさせよう、そのための関数が「メソッド」である。 メソッドは「オブジェクトが持つ関数」のことということになるが、実際には多くの場合、アクセス制御がpublicの物のみを指すことが多い。それは、メソッドが「オブジェクトとプログラムの仲介役」を担うことが多いためである。 オブジェクトはデータの塊だが、実際にはそれを「生」では触らせたくない場合が多い。もし素のままのデータをさらけ出していれば、それはオブジェクトとしては成り立たない。 そこで、オブジェクトとその外部との仲介役を、メソッドに持たせることが重要となる。データの変更、もしくは外部へのコピーは、メソッドを通してのみ行えるようにする。こうすることで、オブジェクトはデータの振る舞い方を自分自身で決めることができると言えるようになる。 |
メタファイル ( Meta File )
画像フォーマットのひとつ。データを曲線で構成したもの。 ウィンドウズでは、ウィンドウズオブジェクトとして「メタファイル」を作成できる。メタファイルは曲線をデータとして持つ。ビットマップを「フォトショップ」と考えれば、メタファイルは「イラストレーター」ということになる。 メタファイルは CreateEnhMetaFile() などの API を用いて操作する。一応 HENHMETAFILE というハンドルを使用して操作することもあるが、通常はデバイスコンテキストを介して操作する。また MFC には CMetaFileDC というクラスが用意されておりこちらを使用することもできる。 |
メッセージ( Message )
「連絡」 ウィンドウズでは定数値のこと。通常 WM_ のプレフィックスの付いた単語として定義されている。 メッセージはそれぞれ「マウスを動かした」「ウィンドウがアクティブになった」などの意味が与えられている。実際にこれらのイベントが発生したとき、スレッドのメッセージキューにメッセージが貯えられる。このメッセージキューからメッセージループを用いてメッセージを取り出し、ウィンドウプロシージャへと送る。またいくつかのメッセージは直接ウィンドウプロシージャへと送られる。ウィンドウプロシージャはメッセージを調べることで「ウィンドウに何が起こったのか」を取得でき、それに対して処理を行う。 MFC の場合にはこの処理は内部的に行われ、メッセージハンドラが呼び出されることになる。 メッセージは API の SendMessage() や PostMessage() を用いて送信することもできる。 |
メッセージキュー( Message Queue )
「信号行列」 ウィンドウズのシステムの一部。 「ウィンドウを左クリックした」などのイベントはメッセージを発行しスレッドへと送信される。メッセージの一部はウィンドウプロシージャへと送られるが、大部分は「メッセージキュー」へと送られる。 メッセージキューには送られたメッセージが貯められる。先に送られてきたメッセージから先に取り出されるのは、チケットを買う行列と同じである。この構造を「キュー構造または先入れ先出し構造という。メッセージキューからメッセージを取り出すには GetMessage() というAPIを使用する。通常この取り出したメッセージを DispatchMessage() を用いてウィンドウプロシージャへと送る。この繰り返し(「メッセージループ」と呼ばれる)によってメッセージは次々と処理されていく。 MFC の場合、これらの処理は内部で自動的に行われる。 当然、古いメッセージを取らなければ新しいメッセージが処理されない。長時間のファイル処理を行うと途中でキャンセルができない(ボタンが押せない)のはこのためである。この場合、マルチスレッドを使用する。メッセージキューはスレッドごとに作成されるため、長時間の処理とキャンセル待ちを別スレッドにすることで解決することができる。 |
メッセージハンドラ( Message Handler )
ウィンドウズメッセージを処理するためのハンドラ関数。 通常メッセージはウィンドウプロシージャへと送られる。その中で switch() などを使用してメッセージを分岐処理するのが、非 MFC アプリケーションでよく用いられる方法である。 MFCはこの部分を内部的に処理し、「特定のメッセージが呼び出されたら特定のメンバ関数を呼び出す」というシステムを用いている。このメンバ関数を「メッセージハンドラ」と呼ぶ。 メッセージハンドラはマクロや仮想関数、メンバ関数ポインタを用いた複雑なシステムの上に成り立っているが、「メッセージとメンバ関数が結びついている」という考え方は分かりやすい。 多くの言語やライブラリ、 OS がメッセージハンドラをサポートしているため、これから標準的な存在になるであろうと思われる。 |
メッセージループ( Message Loop )
メッセージをメッセージキューから取り出しウィンドウプロシージャへと送る、 for や while を使用したループのこと。このループを持たなければメッセージを処理することはできない。 |
メモリ( Memory )
「記憶」 コンピューターの部品のひとつ。 俗に「SIMM」や「DIMM」と呼ばれる、32Mとか64Mとかあるものがそうである。これはLSIのチップで構成されている。このチップの中には、簡単に言えば「スイッチ」が入っており、そのオンとオフでデータを保存する。 このスイッチひとつが2進数(ビット)の1桁であり、4つが16進数の1桁であり、8つが1バイトであり、32個が4バイト、つまり int のサイズとなる。つまり整数値ひとつ格納するのにスイッチ32個を使用していることになる。 また、これらのスイッチには8つごと(つまり1バイトごと)にインデックスナンバーが付いている。背番号のようなものである。これが「アドレス」と呼ばれるものであり、この「アドレス」を格納する変数がポインタである。 ウィンドウズの場合、このメモリを仕分けし、それぞれを各プロセスに渡す。そのため、プロセスは他のプロセスのメモリ領域へは干渉することができない。また、変数へのアドレスは「仕分けされたあと」のインデックスナンバーのため、実際の物理上のものとは異なる。このようにすることで、プログラムの誤作動がシステム全体に及ぼす影響を減らしている。 |
メモリデバイスコンテキスト
( Memory Device Context ) 表示機能を持たない、メモリ上のみのデバイスコンテキスト。 通常、デバイスコンテキストは特定のウィンドウに張り付き、画面への描画に用いられる。しかし、このデバイスコンテキストに直接描画した場合、各描画が VSYNC と同期 しなければならないため、表示に時間が掛かる場合がある。 メモリデバイスコンテキストは、特定のウィンドウに張り付いていないデバイスコンテキストである。メモリ上にのみ存在し、メモリ上への描画を行う。そしてその結果を、画面表示を行うデバイスコンテキストへとコピーすることで画面へと反映する。この転送そのものは比較的速く行われるため、これにより描画速度を高めることができる。また、再描画時に実際の描画を再び行わなくて済むというメリットもある。 メモリデバイスコンテキストの作成には、 API の CreateCompatibleDC() 、もしくは MFC の CDC クラスが持つ同名のメンバ関数によって行う。これによって「画面表示を行うデバイスコンテキスト」と同等のデバイスコンテキストをメモリ上に作成することができる。 ただし、この段階ではまだメモリデバイスコンテキストは使用できない。キャンバスとして機能するビットマップが存在しないためである。そのため、 CreateCompatibleBitmap() によって「画面表示を行うデバイスコンテキスト」が持つものと同じビットマップを作成し、 SelectObject() によってメモリデバイスコンテキストに割り当てる必要がある。 これでメモリデバイスコンテキストに描画を行うことができる。行ったのち、 BitBlt() を使用して「画面表示を行うデバイスコンテキスト」へと描画結果をコピーすることで、画面へと反映させることができる。 |
メモリマップトファイル( Memory-Mapped File )
ファイルマッピングのこと。前は「メモリマップトファイル」もしくは「メモリマップドファイル」の名称が良く使われていたのだが、これは Microsoft だけの言葉らしく、最近は他の OS でも使われる「ファイルマッピング」の方が推奨されているようである。 |
メモリモデル ( Memory Model )
「メモリ構造」 メモリの構造。 ウィンドウズ3.1以前には、コンピューターの性能などの関係で、メモリへの変数の格納方法や、アドレスの指定方法などがシステムによって異なっていた。これらそれぞれの方法を「メモリモデル」といい、プログラムはこのメモリモデルにあわせて組む必要があった。 ウィンドウズ9x以降は、メモリをシステムが覆い隠しているため、システムごとにメモリモデルが異なることはなくなり、リニアな32ビットポインタとして操作すれば問題ない。 far および near も参照のこと。 |
メモリリーク
( Memory Leak ) 「メモリ漏れ」 取得したメモリ領域を解放し忘れること、もしくは解放できなくなること。 変数の動的生成を行ってメモリ上の領域を確保したあと、不必要になったあとも解放し忘れたり、確保したときに取得したポインタを失って解放できなくなってしまうと、そのメモリ領域は削除することも再割り当てすることもできない邪魔な領域となる。この邪魔な領域を「メモリリーク」と言う。 メモリリークとなった領域が増えることで、無駄にメモリを消費し、大きな領域を確保するときの妨げとなる。 アプリケーションが短時間で終了する場合にはそれほど問題はない。ウィンドウズの場合、メモリ領域はプロセスの中に存在し、プロセスの終了と共にウィンドウズシステムへと返還され、このときにプロセスが確保していたメモリ領域はすべてリセットされるためである。 しかし、大きな領域を確保したり、常駐型として常に働き続けるアプリケーションの場合には、メモリリークが深刻な問題となるため、メモリリークはできるだけ避けなければならない。 避けるためには、解放し忘れたメモリ領域がないか調べ、あれば適切なタイミングで解放するようプログラムを組む必要がある。 Visual C++ 付属の C ランタイムライブラリに入っている _malloc_dbg() や、 MFC に入っているデバッグバージョンの new を使用することでメモリリークを調査することができる。 |
メンバ関数( Member Function )
「関数構成員」 クラスや構造体が持つ関数。「メソッド」と同意。 アクセス制御によって意味が大きく異なる。 public は内部と外部の仲介役となり、メンバ変数へのアクセスを監視する。privateは内部でのみ必要な処理を行う。protectedは継承先との仲介役となる。 メンバ関数はクラスの「見かけ」となるため、細心の注意を払ってデザインすること。軽くて何にでも使えるヤツにするか、厳格できっちりと仕事をこなす存在にするか、それが問題である。 |
メンバ変数( Member Variable )
「変数構成員」 クラスや構造体が内部的に持つ変数。「プロパティ」と同意。 アクセス制御によって意味が大きく異なる。 public はアクセスの管理が行えないため危険。できるだけ使用を避けるべき。privateに通常はする。protectedは継承されることが決まっている場合に使用する。 メンバ関数に比べると、「特性」を付ける部分があまりないため、設計としては目立たない存在。しかし「ポインタにするか参照にするか」「 const にするか非 const にするか」といった部分は大きな意味を持つため設計時に十分考慮すべき点である。 |
戻り値( Return Value )
<もどりち> 関数から返された値。 関数を return で終了する時に戻り値として指定された型の値を渡すことで、関数そのものが戻り値の変数として振る舞う。この値を取得することで関数の結果を知ることができる。計算機で「=」を押したあとに出てくる値のようなもの。 が、戻り値はひとつしか指定できないため、ふたつ以上の値を返す必要がある場合にはポインタや参照を使用する。 |
モニター ( Monitor )
「監視」 一般には、コンピューターに継なぐデバイスのひとつで、ブラウン管や液晶を用いて画像を表示するものを指す。ディスプレイとも呼ばれる。 狭義には、「何かを監視する」という意味を持つ。たとえば「 OS 内部をモニタリングする」などと使用する。 |
モーダルダイアログボックス( Modal Dialog Box )
「形式的ダイアログ」 ダイアログの種類のひとつ。 表示されると親ウィンドウへの操作ができなくなる種類のダイアログをモーダルダイアログボックスという。通常のダイアログはこれ。 プログラム的には、APIの DialogBox() や MFC の CDialog::DoModal() を呼び出すことで作成・表示することができ、表示されたダイアログが閉じない限りこれらの関数から返ることはない。 表示しても親ウィンドウを操作することができるものをモードレスダイアログボックスという。 |
モードレスダイアログボックス( Modeless Dialog Box )
「非形式的ダイアログ」 ダイアログの種類のひとつ。 表示されても親ウィンドウへの操作がそれまで通り可能な種類のダイアログをモードレスダイアログボックスという。フォトレタッチソフトなどのツールボックスによく使われる。どちらかというとウィンドウに近い。 プログラム的には、APIの CreateDialog() やMFCの CDialog::Create() を呼び出すことで作成・表示する。 通常のダイアログをモーダルダイアログボックスという。 |
文字 / キャラクター ( Character )
C 言語において、「文字」とは整数値に他ならない。 「画面上に文字列を表示する関数」は、受け取った「1文字」に当たる整数値としての値を文字コードに照らし合わせ、フォントに割り当てられた「文字のグラフィック」を表示するという実装を行っている。 「1文字」は、 char ひとつ以上、もしくは wchar_t を用いて表される。これらは文字コードによって変わる。詳しくは文字列を参考にすること。 |
文字コード / キャラクターコード ( Character Code )
「文字割り当て表」 特定の整数値がどの文字に当たるかを表すデータ。 C++ では「文字」というものは存在しない。文字列を表示する関数は「1文字」に当たる整数値を「文字コード」と呼ばれる表に照らし合わせ、見つかった文字を、フォントとして存在するグラフィックとして表示する。 つまり、文字コードは「特定の整数値」と「フォント上の特定の文字」とを結びつける「表」なのである。「写植用の文字が並ぶケース」を思い浮かべると分かりやすいかもしれない。 この文字コードは場合場合によって大きく変わる。「その地域にしか存在しない文字」を表示するため、独自仕様の文字コードが乱立しているためである。 一般に、ウィンドウズであれば、英数文字は ASCII コード、日本語であれば Shift JISが用いられている。 つまり OS を超えた環境、インターネット上ではこれ以外の文字コードが使用されている場合も多々あるため、注意すること。この場合には文字コードの変換が必要な場合がある。 また、以上とは別に、仮想キーコードから文字コードへの変換が必要な場合もある。これは仮想キーコードの変換を参照のこと。 |
文字コードの変換
文字コードはウィンドウズのみなら Shift JIS のみを扱えばいいが、ネットワークを介する場合には他の文字コードも存在するため、そういった文字列を操作する場合には文字コードの変換が必要となる。 インターネットでよく使われるのは Shift JIS 、 JIS 、 EUC の3つのコードである。これらの変換は、インターネット用アプリケーションでは必要不可欠である。そのため、これらの変換用ライブラリはインターネットの色々な場所に掲載されているので、それらを探しだし使用するのが最も簡単な方法である。 これら3つのコードの変換とは別に、「改行文字( \n )」などの特殊文字の変換が必要な場合もある。これは使用する OS に合わせて変換する必要がある。これらの問題についてもライブラリの探して使用するのが望ましい。 また、以上とは別に仮想キーコードの変換を意味する場合もあるのでそちらも参照のこと。 |
モジュール ( Module )
「構成単位」 広義には「アプリケーションを構成する単位」。一般には次のふたつの意味で使用される。 ひとつは「プロセス」や「インスタンス」と同じ意味。実際、 Win32 では HMODULE は HINSTANCE と同じ型である。 もうひとつは「実行ファイル」もしくは「 DLL ファイル」という意味。コンポーネントに近いか。こちらの意味として使われる方が少ないと思われる。 |
文字列( String )
C 言語には組込型として文字列を扱う型は用意されていない。そのため、配列やポインタ、クラスを文字列の代わりに使用する。 MFC には文字列クラスとして CString が用意されている。文字列クラスとして最も使いやすいため、 C++ 言語を始めたばかりという場合にはこれの使用をお奨めする。 標準 C++ ライブラリには std::string という文字列クラスが用意されている。使い勝手と汎用性で CString に勝っているが、使い方にクセがあることとドキュメントが少ない点が難点。 配列はもっとも基本的な方法。通常は TCAHR 型の配列として作成する。配列は型としては最も特殊なため、初めて使う場合にはあまり奨めないが、簡単に文字列を受け取りたい場合などには便利。固定長のためサイズを大きくできない点なども難点。 配列の代わりに変数の動的生成を行なって得たポインタを使用すれば、配列の「サイズを変えられない」という問題点を克服できる。と言っても CString や std::string はこういったことを内部的に行っているので、結局の所これらのクラスを使用した方がいいということになる。 ウィンドウズの場合、文字列を渡してもらいたい場合には引数の型が LPCTSTR になっている。 CString と配列の場合にはそのまま渡せばいい。 std::string の場合には std::string::data() を呼び出してその戻り値を渡せばいい。 文字列を受け取ってもらいたい場合には引数の型が LPTSTR になっている。配列はそのまま渡せばいい。 CString は CString::GetBuffer() を呼び出してその戻り値を渡し、受け取ったあと CString::ReleaseBuffer() を呼び出せばいい。 std::string はコンストラクタや std::resize() などで十分なサイズを確保しているのなら std::begin() の戻り値を渡せばいい。 文字および日本語の文字列も参照すること。 |
ユーザーインターフェイス ( User Interface )
「入出力部」 コンピューターと、それを使用するものの間に存在するもの。 使用者からの入力を受け付け、コンピューターからの出力を表示する、それが「ユーザーインターフェイス」である。 大まかに分けて、ユーザーインターフェイスには、「文字列の入出力」を基本とする CUI と、「ボタンなど見た目に分かりやすい入出力」を基本とする GUI に分かれる。現在は GUI が主流。 |
ユーザーインターフェイススレッド( User Interface Thread )
メッセージループを持つスレッド。 作成方法はワーカースレッドと同じだが、メッセージループとウィンドウプロシージャを持ち、ウィンドウやダイアログを作成してメッセージを受け取る。ウィンドウが閉じるまで関数からは抜けず、スレッドも終了しない。 このスレッド内の変数には外からアクセスすることができない。また、関数には間接的にメッセージ形式で送られる。これにより特定の変数に同時に複数のスレッドがアクセスすることを防ぐことができ、同期の心配をする必要がない。 |
有限状態オートマトン
( Finite State Automaton ) 状態数が有限のオートマトン。 特定の入力に対してプログラム内の内部状態が変化し、特定の出力を出すものを「オートマトン」と言う。このオートマトンの中でも、状態数が有限であり、また出力が通常0であり、ある特定の場合のみ1が出力されこの場合にオートマトンが終了するものを「有限状態オートマトン」と言う。 一般のプログラムでは状態数はほぼ無限と言ってよく、また出力数も無限のため基本的に使用されないが、「オートマトン的処理」が必要なプログラムで概略図を作成したり、タイトな組み込みプログラムを作成する場合には役立つ。 |
有効桁数
( Precision ) 実際に意味を持つ値の範囲。 float や double は非常に広い範囲の値を表現できるが、しかし、実際に値として意味を持つ範囲は限られている。これは、これらの実数型は「意味を持つ値(仮数部)」と「小数点を付ける桁(指数部)」のふたつの値から成り立っているからである。もし小数点の値によって10京という値が作られたとしても、「意味を持つ値」から小数点までの値は「不明」であるため、この範囲の値を計算に使用すると大きな誤差が生まれる原因となる。 有効桁数は、「意味を持つ値」の桁数である。有効桁数が大きければ「意味を持つ値」が表現できる範囲も広がり、より計算に使いやすくなる。また、「意味を持つ値」は、ビットで小数を表現するために誤差が生じることが多い。この誤差は有効桁数が大きいほど小さくなるため、この点でも有効桁数が大きいことが意味を持つ。 有効桁数は、 float であれば6〜7桁、 double であれば15〜16桁である。 これとは別に、 printf() や std::cout などでは表示する桁数を設定することができる。 |
呼び出し規約 ( Calling Convention ) 関数の呼び出されかたを決める設定。 単純に「関数を呼ぶ」と言っても、機械語のレベルでは「この引数をこのレジスタに置く」といった細かい操作が必要となる。この「操作をどう行うか」という設定を決めるのが「呼び出し規約」である。 呼び出す側と呼ばれる側とで整合性が合わなければ、関数は呼びだせないということになる。ただし、同じヘッダーファイルを使用すれば、整合性が合わないということはまず起こらない。使用できない場合には、問題が発生する可能性がある。たとえば関数ポインタを使用する場合には十分注意する必要がある。この点については名前装飾を参照すること。ちなみに名前装飾のカテゴリでは、「呼び出し規約」は「名前付け規約」と呼ばれることがある。 Visual C++ では __cdecl, __stdcall, __fastcall のみっつが用意されている。 |
予約語
( Reserved Word ) すでに存在する単語。 あらかじめ存在している単語を「予約語」と言う。ある予約語と同じ名前で別の意味の存在を作ることはできない。新たにユーザーが作る変数、関数、型等の単語(つまり識別子)には予約語と同じ名前は付けられない。もし付ければそれは「すでに存在する予約語と同じ」とコンパイラに解釈される。 一般にはキーワードそのものを指すことが多い。 ただし場合によっては、キーワードに加えて「使用するライブラリですでに定義されている単語」も「予約語」に含めることもあるので注意。 |
ライブラリ ( Library ) 「辞書」 クラスや関数を集め、外部プロジェクトから使用できるようにしたもの。ウィンドウズではスタティックライブラリ、 DLL 、 テンプレートライブラリ の3種がある。 |
ライブラリファイル
( Library File ) 「 DLL 情報ファイル」 拡張子が .lib のファイル。 DLL の作成時に自動的に作成されるファイル。このファイルには「どの DLL にどの関数がエクスポートされているか」という情報が書き込まれている。 DLL を使用する側(通常は実行ファイル)を作成するとき、リンカに使用したい関数が入っているライブラリファイルを指定することで、 DLL 内に存在する関数を呼び出すためのコードを生成してくれる。 |
ラスタオペレーション / ラスタ処理 ( Raster Operation )
「色重ね」 描画処理における色の重ね方。 例えば現実世界において、水彩絵の具で色を塗った場合にはすでに塗られていた色が透けて見えたり混じり合ったりするものである。これを画面上の描画処理でも行うというもの。描画アプリケーションでの「乗算」や「半透明」モードでの描画を想像すればいい。 デバイスコンテキストはラスタオペレーションを行うことができ、各描画において論理演算に基づいた「色の重ね方」を決めることができる。ただし、実際には表現能力が非常に劣っているため、先ほどの「描画アプリケーション」のような機能を実現する場合には別に処理する必要がある。 |
ラッパー ( Lapper / Wrapper ) 「包装」 他の変数や関数をより使いやすくするための関数やクラス。 具体的な例を挙げれば、 CWnd は HWND を持ち ::GetFocus() を包み込む「ラッパークラス」である。 ラッパーには言語的なものが強い。 C 言語タイプの使いにくい API を C++ 言語で使う場合には、クラスやテンプレートなどによって使いやすくなったラッパーが作成されることが多い。 MFC はその典型と言える。この例に言えるように、ラッパーが必ずしも便利とは限らない。どんな物にもメリットとデメリットがあると言える。 型のラッパーは、通常その型の変数を持つものを言い、継承はラッパーに含めない場合が多い。だが、継承元がメンバ関数を持たない型や、便宜上「クラス」と呼ばれていないもの( COM インターフェイスなど)からの継承は「ラッパー」と言う場合もある。 |
|
ラップアラウンド ( Wrap Around )
「丸め込み」 様々な意味を持つ単語。 基本的には、端や角を丸め込むという意味がある。 数値演算では、オーバーフローやアンダーフローした値を使える値になるよう変換することを言う。「使える値」は、一般には「反対側の値」を指す。つまり+側の上限値を超えた値は、−側の下限値へと変換される。 CPU の中にはこの「値の置き換え」を行う命令を持つものもあり、画像処理等の高速化に役立つ。 文字列処理では、行の端に来て表示しきれない単語を次の行に送ることを指す。 |
|
ランダム ( Random )
「テキトー / でたらめ / 乱数」 でたらめな値、もしくはその値を作成すること。 ゲームなど、偶然性が必要な場合に「でたらめの値」が必要となる。この値を「ランダムな値」という。決まり切った処理を行うのが得意なコンピューターにとって、ランダムな値を作成することは不得手である。 最も簡単な方法は、C ランタイムライブラリの rand() を使用することである。この関数によって求められた値を、必要な範囲の値で割ってその「あまり」を使用する。ただし、 rand() は「初めから決められている、ばらばらの値」を返すだけなので、まず srand() で初期化してから使用する。 rand() は必ずしも「バランスのいいでたらめな値」を出力しない。数値解析などで完全にランダムな値が必要な場合には、専用のライブラリを使用するか、専用の周辺機器を使用する必要がある。 |
ランダムアクセス ( Random Access )
「どこでもアクセス」 ファイルやメモリ等に対して、読み書きをどこからでも行える状態のこと、もしくはそれを行うこと。通常のファイル操作。 ファイル入出力を行うためのライブラリには、 fseek() などの「読み書きポインタを移動する」関数やクラスが用意されている。これらを使用することでファイルのどこにでも読み書きできる。これを「ランダムアクセス」という。また、ランダムアクセスモードで開かれたファイルを「ランダムアクセスファイル」と呼ぶ。 反対に「先頭から順次読み書きする」ものを「シーケンシャルアクセス」と言う。 |
リージョン ( Region )
「区域」 特定の部分を囲む閉じた領域。 ウィンドウズでは、ウィンドウズオブジェクトとして「リージョン」を作成できる。リージョンは「閉じた領域」であり、形は4角や丸など自由に作成できる。ただし必ず閉じており、よって「何かを囲む」ことに使用する。たとえば「描画していい範囲」や「ウィンドウの形」などに使用する。 リージョンは HRGN というハンドルを介し CreateRectRgn() などの API を用いて操作する。また MFC には CRgn というクラスが用意されておりこちらを使用することもできる。 |
リスト構造 ( List )
「数珠つなぎデータ構造」 データ構造のひとつ。動的にサイズを変更できる、配列状の構造。 配列のように、「雰囲気」としては1列に各要素が並ぶ形式で複数のデータが格納される構造となっている。が、メモリの上では必ずしもそうなっていない。 各要素はひとつずつ動的に生成される。各要素は「自分と同じ型のポインタ」をふたつ持ち、一方は自分の左隣の要素のアドレスを、もう一方は自分の右隣の要素をアドレスを格納する。こうすることで各要素が数珠つなぎとなる。各要素にアクセスする場合には、このポインタをもとに各要素を渡り歩くことになる。 要素と要素はポインタでつながれているため、要素の追加や削除が非常に素早く行える。これは「普通に要素を生成し、ポインタをつなぎ変えればいいだけ」だからである。反面、全要素を調べるためにはポインタを調べつつ移動しなければならず、そのためやや時間が掛かる。また、要素の挿入が頻繁に行われるため順番が常に変わりうることを踏まえて、「インデックスナンバー」を元にした操作を行えないことが多い。 MFC のコレクションを使用する場合には CList 系クラスが、 STL のコンテナを使用する場合には std::list クラスがリストとして使用できる。 |
|
リストビューコントロール
( List View Control ) 「表形式コントロール」 ダイアログボックスコントロールのひとつ。 ひとつのアイコンとひとつの文字列を組としたひとつの要素を表形式で表示するコントロール。「大きいアイコン」「小さいアイコン」「一覧」「詳細」の4つの表示モードを持つ。エクスプローラーなどで使用されている。ウィンドウクラスが SysListView32 のウィンドウでもある。 リストビューコントロールへのアクセスは API であればプレフィックスが LVM_ のメッセージを使用する。 MFC であれば CListCtrl クラスを使用する。また、ビューとして使用する場合には CListView を使用する。 |
リソース( Resource )
「資源」 広義には、何かを作成するための「原料」。たとえば変数にとっては「メモリ」がリソースとなる。また、社員のことを「人的リソース」と呼ぶ場合もある。 ウィンドウズでは、一般にはユーザーインターフェイスを作成するためのデータを指す。 「アクセラレーター」「ビットマップ」「マウスカーソル」「ダイアログボックス」「メタファイル」「アイコン」「メニュー」「ストリングテーブル」「バージョン情報」など、ユーザーの目に触れる「ユーザーインターフェイス」となる各パーツを「リソース」と呼ぶ。もしくは、実際にリソースとして機能する前の、グラフィックや文字列を指す。 リソースは「リソースエディタ」を用いて作成し、リソース専用のコンパイラを用いて変換しリンカを用いて実行ファイルや DLL の中に埋め込む。そして LoadAccelerators() などの API を用いてそのデータを取り出し、ウィンドウズシステム内へと渡すことでウィンドウズオブジェクトとして作成され、実際にアクセラレーターやビットマップとして機能する存在となる。 また、「リソース」という言葉には、こうしてユーザーインターフェイス系のウィンドウズオブジェクトだけでなく、なんとか Alloc で確保されたメモリや、フック、デバイスコンテキスト、リージョン、同期オブジェクトやプロセスなども含めたすべてのウィンドウズオブジェクトを指す意味もある。アクセサリの「リソースメーター」のリソースはこちらの意味である。 ウィンドウズオブジェクトはシステム内で変数の動的生成が行われることで作成される。これらは当然ポインタとして管理される。このポインタがハンドルである。これらは、プロセスなどの「システムリソース」、アイコンなどユーザーインターフェイスの「ユーザーリソース」、描画を行う GDI の「 GDI リソース」に分けられ、それぞれ別の仮想アドレス空間で確保される。 そのアドレスを格納するポインタのサイズはそれぞれ異なり、特にユーザーリソースはシステム全体で2バイトサイズのポインタとして管理される。ユーザーリソースにはアイコンやメニュー、ウィンドウが当てはまるため、複数のアプリケーションを同時に実行することでユーザーリソースの数が増大し、場合によってはポインタのサイズを超えてしまいシステムが機能しなくなってしまう。これが「リソースの枯渇」である。これは、ポインタのサイズなどウィンドウズシステム内部の問題のため、メモリの増設などでは対応することができない。 |
リテラル
( Literal ) 「定数」 プログラム上に直接書かれた数字や文字。 リテラルは散在させず、 const 変数に格納するようにして、その格納を一ヶ所でまとめて行うようにすると管理がしやすくなる。これは、直値をハードコーディングすると、どこでハードコーディングされたのかを検索するのが大変だからである。 文字列のリテラル、リテラル文字列も参照すること。 |
リテラル文字列 ( String Literal )
「ダブルクォーテーション文字列」 プログラム上に直接書かれた文字列。リテラルの文字列版。 ダブルクォーテーション( "" )で囲まれた複数個の文字を「リテラル文字列」という。ダブルクォーテーション内の文字列には終端文字が自動的に追加される。 リテラル文字列の型は「文字列を指すポインタ」となる。リテラル文字列もメモリ上に書き込まれており、そのアドレスが取得できるからである。このポインタを直接使用するか、配列にコピーしてから使用する。 リテラルと同じように、検索上の問題から、プログラム上にリテラル文字列を散在させると管理が難しくなるため、リテラル文字列は変数に格納するようにし、その格納を一ヶ所でまとめて行うようにすべきである。また、ウィンドウズでは他言語への対応などの利点から、リソースのストリングテーブルとして文字列を格納しそれを使用する方法が勧められる。 |
リトルエンディアン( Little-Endian ) インテル系CPUバイトオーダー。 たとえば int i = 0xFEDCBA98; とした場合、実際のメモリ上には「 98BADCFE 」という形で格納されている( char *pi = (char *)i; として配列要素を見てみれば分かるだろう)。 これは一見不自然に思えるが、実際にはそうでもない。たとえば10進整数の計算で「12+34」を行う場合、繰り上がりがあるためまず「2+4」を、次に「1+3」を計算する。これは右から左へと読むことになり、計算式の読み方から見れば不自然と言える。 そこでまず「21+43」へと変換をすることで、左からの計算を行える。これがリトルエンディアンの考え方である。 ただ、頭の中で考えにくいことには変わりがない。ちなみに「考えやすい」方をビッグエンディアンと呼ぶ。 リトルエンディアンは「 LSB First 」とも呼ばれる。 また、「エンディアン」という単語はない。 |
リバースエンジニアリング ( Reverse Engineering )
「分解工学」 すでに組み立てられた製品を元の素材に戻す技術。 一般には、製品を「部品」や「素材」に戻すこと。リサイクル分野において非常に注目されている技術。 プログラミングにおいては、プログラムコードから関数やクラスを解読し、仕様書等にまとめる技術を言う。基本的には専用アプリケーションを使用して自動的に行う。 アプリケーションにおいては、逆アセンブル等を行ってプログラムの解析を行うことを指す。 |
リバースプロキシー / 逆プロキシー ( Reverse Proxy )
インターネットにおけるプロキシーの機能のひとつ。 ホームページを閲覧するべくサーバーへとリクエストがあったときに、サーバーの手前にプロキシーサーバーを設置し、そのプロキシーサーバーからホームページデータを返す機能を「リバースプロキシー」という。 ホームページ用サーバーが CGI 処理に費やされている場合などに代わりにホームページサーバーとして機能することで、処理を分散化させられるなどのメリットがある。 |
リモートプロシージャコール
( Remote Procedure Call / RPC ) ネットワーク上の他のコンピューターに置かれた実行ファイル中の関数を呼び出す方法。 マシンパワーに限界がある場合などには、複数のマシンに処理を分散させることで計算能力を高める手法が取られる。このとき、複数のマシンに置かれた複数の関数を呼び出す方法が「リモートプロシージャコール」である。 呼び出し側、呼び出される側共に Rpc をプレフィックスに持つ API を使用することで実現できる。また、呼び出される側は必ず、呼び出す側は必要なら、 IDL をヘッダーファイルの代わりとして使用する。そうすることでコンピューター間の壁を乗り越えて使用することができる。 これらのことから分かるとおり、COMはリモートプロシージャコールを使用して関数呼び出しなどを解決している。リモートプロシージャコールが通常の関数しか使えないことなど、COMの方がメリットが多いとも言える。 性質を考えれば一種のマルチスレッドとも言える。 |
|
リンク( Link )「連結」 コンパイル後の中間ファイルをひとつにまとめ、実行ファイルを作成すること。リンクはリンカが行う。 具体的には、各中間ファイル内の関数や変数を呼び出し側に結びつける。DLLの場合には、「ライブラリファイル」を元にDLL内の関数や変数を呼び出せるようにする。 |
リング ( Ring )
「許可範囲」 インテル系CPUが持つ命令の使用制限のレベル。 安全性を高めるため、 Intel 386 互換プロセッサーでは、アプリケーションがどの「リングに属するか」によって、実行できる命令に制限が設けられる。 通常のアプリケーションはリング3に位置し、システムにダメージを与えかねない命令を呼び出すことができない。対して、デバイスドライバーなどはリング0に位置し、全ての命令を実行することができる。 「リング」の存在はこのようにCPU依存であり、そのため Win9x のみの仕組みである。インテル互換以外のCPUも使用できる WinNT / 2K では違うアーキテクチャーが使用されている。 |
リングバッファ ( Ring Buffer )
「輪配列」 先端と末端が継ながっているコンテナ。 「音声の録音」など、続けてデータを保存しておきたいが無限に容量が取れるわけでもない場合に、一定サイズのコンテナを用意し、コンテナの終端まで書き込んだら再び先頭から書き込み始める、というものを利用する。これを「リングバッファ」という。 リングバッファを実現するには、実際に「終端まで来たら先端へのポインタを返す」ような実装をする必要がある。既存のライブラリにリングバッファとして機能するコンテナが入っていることは少ない。 |
リンケージ( Linkage )
「結合」 グローバルな変数および関数のリンカに対する情報。 複数のソースファイルをコンパイルしリンクすることで実行ファイルは作成される。このとき「ひとつのソースファイルにある変数もしくは関数を複数のソースファイルから使用する」必要がある場合がある。この場合に必要なものが「リンケージ指定」である。 リンケージ指定子には static と extern がある。 |
|
例外処理 ( Exception ) 「エラーが発生したとき、適切な処理を行える部分に移行できるシステム」。 例えば「ファイルの読み込み」を行う処理の中で、「ファイルのオープン」のエラーと「動的メモリ割り当て」のエラーを分け、「このエラーが発生したらこの部分へ飛ぶ」というふうに行うことができる。 ウィンドウズプログラミングにおいて、「例外処理」には C++ 言語のものとウィンドウズシステムのものとふたつある。 前者はシンプルで分かりやすいシステムになっている。単純にいえば return の強力版といったところだろう。現在はこちらが推奨されている。 後者は構造化例外処理と呼ばれている。こちらも C++ の例外処理はカバーしており、またいくつか問題もあるので、構造化例外処理は使用しない方がいい。 |
レイテンシ
( Latency ) 「待ち時間 / 遅延時間」 命令を出してから、それが実行されるまでの時間。 たいがいの処理は、その処理をするよう命令してから、結果を出すまでに時間が掛かる。この時間をレイテンシと呼ぶ。一般に無駄な時間を指す。 もちろん、この時間が短ければ短いほどよい。 |
レイトバインディング
( Late Binding ) 「後でバインディング」 COM がデュアルインターフェイスを持っている場合、 ディスパッチ を COM を使用することを指す。 COM を呼び出したときではなく、各関数を呼び出す段階になってディスパッチを用いて関数呼び出しの準備を行うため「 Late Binding 」と呼ばれる。 |
レジストリ ( Registry )
「記録簿」 ウィンドウズにおける、各種設定を保存するためのシステム。 ウィンドウズのソフトウェア・ハードウェアの情報は、そのほとんどが「レジストリファイルである System.dat と User.dat に書き込まれている。このファイルの中身を見る場合には WINDOWS\Regedit.exe という、一般に「レジストリエディタ」と呼ばれるアプリケーションを使用する。 各プログラムが、自プログラムの設定を保存・読み込みを行う場合、 API の RegCreateKeyEx() を初めとする関数を使用する。 MFC を使用する場合、 CWinApp クラスの GetProfileInt() といったメンバ関数を使用するとレジストリへの読み書きが簡単に行える。 レジストリに書き込まれたデータは、簡単には取り出し・保存・コピー等ができないため、たとえば「他のPCへと設定をコピーするのが難しい」などのデメリットがある。 しかしレジストリは、特に意識することなく複数ユーザーの設定を分けて保存することができる。そのため、基本的に「アプリケーションの設定」はレジストリへと格納するのが望ましい。 |
|
レンダリング
( Rendering ) 「描出」 広義には、何かを元にして、そこから画像を作り出すこと。たとえば、 HTML ファイルを元にインターネットブラウザでページを表示することを「レンダリングする」と言う。 狭義には、 3DCG において、モデリングした形状を実際に見ること。 3DCG は「レイトレーシング」という「光の進行を追跡する」ことで画像を作り出す。つまり、モデリングした物に光線を一本一本照射し、その行方を追うことで「ある視点から見た場合の画像」を作り出すのである。この作業を「レンダリング」という。つまりレンダリングしない限り、モデリングした存在を見ることはできないことになる。 |
ローカル( Local )
「狭域」 特定の中カッコ( { ... } )の中からのみアクセスできる変数、関数、型のこと。 変数などに対してアクセスできる範囲をスコープという。この範囲が特定の中カッコ内に限られているものを「ローカルなんとか」と呼ぶ。 ローカルでない場合をグローバルであると言う。またメンバ関数およびメンバ変数はクラススコープという別の範囲を持つ。 ローカルな変数は使用できる範囲が限定されているが、それだけ管理しやすいということである。そのため安全に使うことができる。 ローカルな関数は、ヘッダーファイルの宣言を関数内で行うことで実現できるが、今はまず使われない。 |
ロード( Load )
「読み込み」 何かを「読み込んで自分の中に取り込む」こと。 通常はファイルを読み込む。たとえば LoadLibrary() はDLLファイルを実行ファイルの中に取り込む。ただし、通常のファイル入出力は Open という言葉をよく使う。 また、 LoadIcon() はリソースからアイコンを読み込んで作成し、そのハンドルを返す。このようにファイルとは限らない場合もある。 |
ロケール( Locale )
「場所」 設定のひとつ。 時間や文字列には地域性があり、その地域によって求められている値は変わってくる。 C ランタイムライブラリやAPIには localtime() や GetLocalTime() などの「その地域の値」を返す関数が存在する。この「地域」をロケールと呼ぶ。 ロケールの設定方法は場合によってまちまちである。 C ランタイムの場合には setlocale() を呼び出してセットする。APIでは「コントロールパネル」の「日付と時刻」プロパティで設定されたものを使用する。 |
ロック
( Lock ) 「固定装置」 何らかの動きを止めること。もしくは止まること。 特にマルチスレッド等で排他処理を行うことを指す場合が多い。あるスレッドがオブジェクトを「使用中」にし、そのオブジェクトに対して他のスレッドが使用できなくすることを「ロックする」と言う。ロックカウントおよびなんとか Lock も参照のこと。 |
ロックカウント
( Lock Count ) 「使用者数」 複数のプロセス等から共有されるオブジェクトが、現在何個から共有されているかを格納する整数値。 メモリ領域など、複数の使用者から共有されるオブジェクトは、勝手に削除してしまうと他の存在が使用できなくなり問題が発生する。この問題を解決する方法のひとつが、「現在の使用者数」を数えておくという方法である。これを「ロックカウント」という。 使用者は、そのオブジェクトを使用するときに決められた関数を呼び出す。もし誰も使用していなかったためオブジェクトが存在していなかったのなら新たに作成し、ロックカウントを「1」にセットする。使用者がいれば、ロックカウントを1増やす。 使用したあと、不必要になった場合にも、特定の関数を呼び出す。呼び出すとオブジェクトのロックカウントを1減らし、もしロックカウントが0ならば、オブジェクトを破棄する。 この仕組みはなんとか Lock系 API や、 COM のクラスファクトリーなどに使用されている。 |
ワーカースレッド( Worker Thread )
普通のスレッド。 普通に作成され、スレッドの作成と同時に関数が呼び出され、関数が終了するとスレッドも終了する、そういうスレッドのこと。 違う種類のものをユーザーインターフェイススレッドと呼ぶ。 |
ワークスペース ( Workspace )
「仕事空間」 非常に広い意味を持つ単語。 Visual C++ では「あるアプリケーションを作るための複数のプロジェクトを含み、管理するもの」を指す。拡張子が .dsw のファイルが、どのプロジェクトを持っているのかという情報を格納している。たとえば「実行ファイル用プロジェクト」と「 DLL 用プロジェクト」のふたつを持つワークスペースは「まず DLL をビルドし、次に実行ファイルをビルドする」といった順番を決める「依存関係」の情報を持つ。 Visual C++ のウィンドウとしての意味も持つ。 ClassView や ResourceView などを含むウィンドウを「ワークスペース」と呼ぶ。この名称は前述の意味でのワークスペース内の情報を管理するためのウィンドウだからと思われる。 「データベース用語」としての意味もある。特定のデータベース全体を管理するための方法を「ワークスペース」と呼ぶ。 「デスクトップ」としての意味もある。表示されている画面全体を「ワークスペース」と呼ぶ。 これらの意味はどれも大きく違うので、文脈から判断すること。 |
ワード
( Word ) 「単語」 広い意味で使用される単語。 広義には「単語」を意味する。一般には、次のみっつの意味がある。 「2バイトサイズ」: 2バイトのサイズを「ワード」と言う。これにより4バイトサイズを「ダブルワード」と言う。 API において、それぞれ WORD および DWORD という型として定義されている。 「標準サイズ」:その OS が使用する標準的なサイズを「ワード」と言う。この場合、ウィンドウズであれば、ウィンドウズは32ビット OS であるため、ワードのサイズは4バイトとなる。 「アドレスの単位」:アドレスが1増えるごとに実際に増えるサイズを「ワード」と言う。ウィンドウズと Visual C++ の組み合わせでは1バイトだが、環境によっては変わる場合もある。 以上のように、その場の意味によってまったくサイズが異なってしまうため、注意が必要。 |
ワードアライメント
( Word Alignment ) 構造体のアライメントのサイズがワードであること。 「ワード」は、多くの場合「2バイト」の意味として使われる。「4バイト」の場合には「ダブルワードアライメント」と呼ばれることがある。 ただし、場合によっては「ワード」は「標準サイズ」の意味で使用されることもあり、文脈を読み取ってどちらの意味か判別する必要がある。 |
割り込み
( Interrupt ) プログラムの流れとは関係なしに、突然、ある関数を呼び出すこと。 外部からの終了命令や、実行中のエラー、特別なキー入力等が行われたとき、そのときのプログラムの流れとはまったく関係なく、特定の関数が呼ばれる。これを「割り込み」と呼ぶ。 具体的には、 C ランタイムライブラリの signal() 関数を通して、特定の割り込みが発生したときに呼び出される関数を指定することができる。この関数の中で割り込み時の処理を行うことで、「何かが起きた」ことに対する処理を行うことができる。 割り込み処理は、プログラムの流れをまったく無視するため、強制的な goto と変わりがない。プログラムの流れが強制的に変更されることで、予期せぬ問題が発生する可能性がある。 ウィンドウズプログラミングの場合、イベントドリブンのシステムや、例外処理を使用することで割り込みに近い機能を実現できる。これらは割り込みと違い、プログラムの流れを強制的に変えるものではないため、安全性が高い。ウィンドウズプログラミングでは、割り込みではなくこちらの使用を勧める。 |
(C)KAB-studio 1999 - 2001 ALL RIGHTS RESERVED. |