次の方法で共有


コーディング スタイルの規則

このサンプル シリーズでは、明確さと一貫性を確保するために、コーディング スタイル規則を使用します。 "ハンガリー語" 表記規則が使用されます。 これらは、Win32 プログラミングの一般的なコーディングプラクティスとなっています。 変数名に変数の型の提案を与える変数プレフィックス表記が含まれます。

次の表に、一般的なプレフィックスを示します。

Prefix 説明
a Array
b BOOL (int)
c Char
cb バイト数
cr 色参照値
Cx x の数 (short)
dw DWORD (unsigned long)
f フラグ (通常は複数のビット値)
fn 機能
G_ グローバル
h Handle
i 整数
l Long
lp 長いポインター
M_ クラスのデータ メンバー
n 短い int
p ポインター
s String
sz 0 個の終了文字列
tm テキスト メトリック
u Unsigned int
Ul Unsigned long (ULONG)
WORD (符号なし short)
x,y x、y 座標 (short)

 

これらは、多くの場合、次のように組み合わされます。

プレフィックスの組み合わせ 説明
pszMyString 文字列へのポインター。
m_pszMyString クラスのデータ メンバーである文字列へのポインター。

 

その他の規則を次の表に示します。

表記 説明
CMyClass C++ クラス名のプレフィックス 'C'。
COMyObjectClass COM オブジェクト クラス名のプレフィックス 'CO'。
CFMyClassFactory COM クラス ファクトリ名のプレフィックス 'CF'。
IMyInterface COM インターフェイス クラス名のプレフィックス 'I'。
CImpIMyInterface COM インターフェイス実装クラスのプレフィックス 'CImpI'。

 

コメント ヘッダー ブロックの一貫性のある規則の一部は、次のようにこのサンプル シリーズで使用されます。

ファイル ヘッダー

/*+===================================================================
  File:      MYFILE.EXT

  Summary:   Brief summary of the file contents and purpose.

  Classes:   Classes declared or used (in source files).

  Functions: Functions exported (in source files).

  Origin:    Indications of where content may have come from. This
             is not a change history but rather a reference to the
             editor-inheritance behind the content or other
             indications about the origin of the source.

  Copyright and Legal notices.
  Copyright and Legal notices.
===================================================================+*/

プレーン コメント ブロック

/*--------------------------------------------------------------------
  Plain block of comment text that usually takes several lines.
  Plain block of comment text that usually takes several lines.
--------------------------------------------------------------------*/

クラス宣言ヘッダー

/*C+C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C
  Class:    CMyClass

  Summary:  Short summary of purpose and content of CMyClass.
            Short summary of purpose and content of CMyClass.

  Methods:  MyMethodOne
              Short description of MyMethodOne.
            MyMethodTwo
              Short description of MyMethodTwo.
            CMyClass
              Constructor.
            ~CMyClass
              Destructor.
C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C-C*/

クラス メソッド定義ヘッダー

/*M+M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M
  Method:   CMyClass::MyMethodOne

  Summary:  Short summary of purpose and content of MyMethodOne.
            Short summary of purpose and content of MyMethodOne.

  Args:     MYTYPE MyArgOne
              Short description of argument MyArgOne.
            MYTYPE MyArgTwo
              Short description of argument MyArgTwo.

  Modifies: [list of member data variables modified by this method].

  Returns:  MYRETURNTYPE
              Short description of meaning of the return type values.
M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M-M*/

エクスポートされていない関数またはローカル関数

/*F+F+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  Function: MyLocalFunction

  Summary:  What MyLocalFunction is for and what it does.

  Args:     MYTYPE MyFunctionArgument1
              Description.
            MYTYPE MyFunctionArgument1
              Description.

  Returns:  MyReturnType
              Description.
-----------------------------------------------------------------F-F*/

エクスポートされた関数定義ヘッダー

/*F+F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F
  Function: MyFunction

  Summary:  What MyFunction is for and what it does.

  Args:     MYTYPE MyFunctionArgument1
              Description.
            MYTYPE MyFunctionArgument1
              Description.

  Returns:  MyReturnType
              Description.
F---F---F---F---F---F---F---F---F---F---F---F---F---F---F---F---F-F*/

COM インターフェイス宣言ヘッダー

/*I+I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I
  Interface: IMyInterface

  Summary:   Short summary of what features the interface can bring to
             a COM Component.

  Methods:   MYTYPE MyMethodOne
               Description.
             MYTYPE MyMethodTwo
               Description.
I---I---I---I---I---I---I---I---I---I---I---I---I---I---I---I---I-I*/

COM オブジェクト クラス宣言ヘッダー

/*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
  ObjectClass: COMyCOMObject

  Summary:     Short summary of purpose and content of this object.

  Interfaces:  IUnknown
                 Standard interface providing COM object features.
               IMyInterfaceOne
                 Description.
               IMyInterfaceTwo
                 Description.

  Aggregation: [whether this COM Object is aggregatable or not]
O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/

これらのコメント ブロック規則はすべて、一貫した開始トークン文字列と終了トークン文字列を持ちます。 この整合性では、何らかの方法でヘッダーの自動処理がサポートされます。 たとえば、AWK スクリプトを記述して、関数ヘッダーを別のテキスト ファイルにフィルター処理し、仕様ドキュメントの基礎として機能させることができます。 同様に、サポートされていない AUTODUCK ユーティリティ (現在は Microsoft Developer Network Development Library CD-ROM で利用可能) などのツールを使用して、これらのヘッダー内のコメント ブロックを処理できます。

次の表に、サンプル チュートリアルで使用される開始トークン文字列と終了トークン文字列を示します。

トークン 説明
/*+ ファイル ヘッダーの開始
+*/ ファイル ヘッダーの終了
/*- プレーン コメント ブロック ヘッダーの開始
-*/ プレーンコメントブロックヘッダーエンド
/*C クラス ヘッダーの開始
C*/ クラス ヘッダーの終了
/*M メソッド ヘッダーの開始
M*/ メソッド ヘッダーの終了
/*F 関数ヘッダーの開始
F*/ 関数ヘッダーの終了
/*私 インターフェイス ヘッダーの開始
私*/ インターフェイス ヘッダーの終了
/*O COM オブジェクト クラス ヘッダーの開始
O*/ COM オブジェクト クラスヘッダーの終了

 

これらのヘッダーは、ソース ファイルを迅速にスキャンするための視覚的な手掛かりとしても使用できます。 また、エディターで検索文字列を設定し、[最後の検索を繰り返す] を設定してこれらのヘッダーをすばやく見つける場合に、ソースの場所にすばやくアクセスするための利便性も提供されます。

たとえば、検索文字列 "M+M" はメソッド ヘッダーの先頭を見つけ、"M-M" は実際のメソッド定義/実装コードの先頭を見つけます。