アークピットのホームページに戻る

WinAPIトピックのトップページに戻る

APIトピックの各章に移動する

ダウンロードのページに移動する
ダウンロードができ
ない場合の対処法
 

ページ移動

1-2-3. 変数名の命名

 変数名に関しては検討を要する事項がたくさんあります。まず変数は前にも触れたハンガリー記法と言う、今では当たり前の命名法を使います。ハンガリー記法とは、マイクロソフトのハンガリー出身のプログラマであるCharles Simonyiにちなんだものです。

ハンガリー記法

 ハンガリー記法とは、本来の名前の前に小文字で、変数の型をシボル化した文字を付加する記法です。例えばnCmdShow,lpszFileName,hWndなどがこの方法で付けた変数名です。nCmdShowのnは整数を表します。lpszFileNameのlpszとはlong pointer to a string terminated by zeroを表します。これは歴史のある命名で、少し後で検討します。またhWndのhは、ハンドルでHWND型であることを表します。

変数名の一般的な命名

  • 変数は通常は、ハンガリー記法で、「型+名前」で命名する。
  • 昔どおりの「int i,j,k;」も有効です。iはカウンター、nは値などと決まった使い方をしましょう。
  • ただし[char buf;」と「char szBuf;」は混在しないようにしましょう。
  • 構造体の場合は、「LOGFONT lf;」の様に小文字で命名する事が多いでしょう。また複数その変数を使用する場合は、「LOGFONT lfText;」の様に構造体をハンガリー記法の様な形にした命名法を使います。
  • Windowsには、「HWND hWnd;」の様に決まった変数名があります。これは十分尊重しましょう。

ポインタのハンガリー記法

 ポインタはハンガリー記法では、lpでしょうか、pでしょうか。lp の l はWindows 3.1のころの16ビットOSの名残です。FARやLong PointerはWIN32では、32ビットのフラットメモリですので関係ありません。しかしAPIはWindows 3.1の頃に確立しましたので、WIN32のAPIの仮引数や、構造体のメンバー変数にlpの名称を使います。  これはどちらを使っても結構です。ただし自分で命名する場合は、pはlpか固定しましょう。私はpをポインタに使っています。lpを使うのはAPI関係の時だけです。しかしAPIもこの辺は不徹底で、一部新しいAPIにはpを使った変数名もあります。

一般的な型のハンガリー記法

 ハンガリー記法はデータ型を示すプレフィックス記号を先頭に小文字で付加します。そして最初が大文字の名前(szName,iCounter など)が続きます。
	c	char
	by,b	BYTE
	n	short,int
	b,f	BOOL(int)
	w	WORDかUINT
	l	LONG
	dw	DWORD
	fn	関数のポインタ
	s	文字列
	sz	ASCIIZ文字列
	p,lp	ポインタ
 BYTEとBOOLでbが使われていますが、byをBYTEにする時は、bをBOOLにして、bをBYTEにする時は、fをBOOLに使用しましょう。ポインタの場合は、例えばlpdwSizeならDWORDのポインタを指します。
	i	int
	x,y	shortでx,y座標
	cx,cy	shortで幅と高さ
 良く使う変数は、上記の様な型を示します。

構造体の命名

 構造体は、やや例外的な命名法を使用します。以下の宣言文をまずご覧ください。
	typedef struct tagAPBPOS {	// pos,ppos,pp
	    DWORD	dwSize;		// データの全サイズ
	    DWORD	dwNumber;		// 個数
	    LONG	lOffset;		// ファイル上の位置
	} APBPOS,*PAPBPOS;
 これはファイル上のあるデータのサイズと個数とファイル位置を示す構造体です。ローカルの構造体以外は、だいたいはtypedefで宣言します。そしてtagXXXと名前を付けますが、この指定はリストの様な、自分自身のポインタを、メンバに使わなければ必要ありません。その次のpos,ppos,ppは、変数に使うときに使用する名前を実体とポインタで明示しています。pposとppの様に複数の名前を使うこともあります。次の3行はメンバです。最後に構造体の実体とポインタの名前をAPBPOS,PAPBPOSと付けています。構造体の名前は型宣言と同じなので、すべて大文字を使用します。これを使用する時は次のようにします。
	APBPOS	posText,posBmp;
	PAPBPOS	ppCurrent,ppNext;
 変数を1つだけ使用する場合は、posやppと言う名前を普通は使用します。

ページ移動