C++命名規則

7131 ワード

C++ネーミング仕様
ハンガリー命名法:基本原則は、変数名=属性+タイプ+オブジェクト記述であり、各オブジェクトの名前には明確な意味が必要であり、オブジェクト名のフルネームまたは名前の一部を取ることができる.ネーミングは記憶しやすく理解しやすいという原則に基づいている.名前の一貫性を保つことが大切です.Camel命名法:ラクダ式命名法です.この命名法を採用した名前はラクダのラクダの峰のように高低起伏しているように見えます.Camelネーミングには、runFastやrun_のような大文字と小文字の間に下線を付ける2つの形式があります.fastはすべてCamel命名法に属します.Pascalネーミング:Camelネーミングと似ていますが、Pascalネーミングの頭文字は大文字です.
  • 1、すべてのネーミングでは、標準的な英語の単語または略語を使用する必要があります.半角、全角、声母、韻母など、中国語特有の内容を記述していない限り、ピンインやピンインの略語を使用してはいけません.
  • 2、すべての命名は望文知義の原則に従うべきで、すなわち名称は意味が明確で、明確であるべきである.
  • 3、すべての命名は長すぎず、規定の最大長以内に抑えるべきである.
  • 4、すべてのネーミングはできるだけフルネームを使用する必要があります.
  • 5、命名に略語を使用する場合は、「汎用略語表」(付録参照)の略語を使用するべきである.「共通略語表」以外の略語は原則として推奨されず、使用する場合は注釈や説明が必要である.
  • 1、工事名:強制統一しない.
  • 2、ファイル名:
  • は、プロジェクト名に基づいて、最初の3文字がどのプロジェクトに関連しているかを示す必要があります.
  • 以降のアルファベットは、異なる機能を区別できるはずです.
  • 大文字と小文字を区別しません.
  • の長さは8.3形式に限定されず、30文字以下を推奨します.
  • ファイルがクラスを定義および実装するために使用される場合、ファイル名はクラス名と一致することを推奨します.

  • 3、関数名:
  • は、Windows APIのネーミング仕様を参照する.
  • は動賓構造の使用を推奨する.関数名は、関数の機能、用途を明確に反映する必要があります.
  • 関数名は最長30文字を超えてはいけません.
  • 関数名の最初のアルファベットは大文字でなければなりません.
  • グローバル関数は、小文字接頭辞「g」で始まる必要があります.

  • 4、変数名:
  • 原則として、変数名の命名はハンガリー記法に従う.すなわち、プレフィックス+タイプ+変数名
  • 1)形式:
  • [m_|s_|g_] type [class name|struct name] variable name
    
  • 2)解釈:
  • m_ : クラスのメンバー変数
  • ms_:クラスの静的メンバー変数
  • s_ :静的グローバル変数
  • g_ :一般グローバル変数
  • タイプ略語(type)
  • char, TCHAR: ch
  • char[],TCHAR[]: sz
  • string: str
  • bool, BOOL: b
  • int, __int16,__int32,__int64: n
  • long: l
  • double: d
  • float: f
  • BYTE: by
  • WORD: w
  • DWORD: dw
  • unsigned: u
  • function: fn
  • p :pointer
  • lp :long pointer


  • 変数名は最大20文字までです.
  • 5、クラス名:
  • は大文字の「C」で始まり、後ろのアルファベットは具体的な意味を反映し、クラスの用途と機能を明確に表現することを原則としなければならない.
  • インタフェースは、Interfaceを表す大文字の「I」で始まる必要があります.
  • 名前が複数の単語で構成されている場合、各単語の最初のアルファベットは大文字でなければなりません.

  • 6、構造体名、マクロ名、列挙名、連合名:
  • はすべて大文字です.
  • 列挙名に小文字の接頭辞「enum」を付ける.例:
  • typedef enum _CFILE_OPEN_MODE
    {
    enumOPEN_READONLY = 0,
    enumOPEN_READWRITE = 1,
    enumCREATE_ALWAY = 3
     } CFILE_OPEN_MODE;
    
    //·       "def"。
    

    例:
    #define defMAXNUMBER 100
    
  • 構造名に小文字の接頭辞「tag」を付け、その後は大文字「C」で始まる必要があります.例:
  • typedef struct tagKPOINT
    {
    int x;
    int y;
    } KPOINT;
    
    //·        "uni"。
    

    例:
    typedef union _VARIANT{
    char unichVal;
    int uninVal;
    long unilVal;
    float uniftVal;
    ...
    } VARIANT;
    
    
  • 在.h/.cppの先頭には、
  • を含むフォーマット統一の説明が必要です.
  • a.ファイル名(FileName);
  • b.文書の機能、用途(Comment)を簡単に説明する.
  • c.作成者(Creater);
  • d.ファイル作成時間(Date).


  • 例:
    /*!
      *@file
      *@brief
      *@author
      *@date
      */
    
  • は、極めて簡単でない限り、関数に注釈を付けて説明する必要があります.機能、入口/出口パラメータ、必要に応じて注釈または補足説明を含む.

  • 行あたりのコードの長さは80列が推奨され、最長120列を超えてはならない.折り返し行は位置合わせに準じます.


  • 例:
    HANDLE CSOpenFile(const char cszFileName[],
    int nMode);

    または、
    BOOL CSReadFile(
    HANDLE hFile,
    void *pvBuffer,
    int nReadSize,
    int *pnReadSize
    );
  • ループ、ブランチコードは、判断条件と実行コードが同じ行にあってはならない.


  • 例:正しい:
    if (n == -2)
        n = 1;
    else
        n = 2;
    

    書いてはいけません:
    if (n == -2) n = 1;
    else n = 2;
    
  • ポインタの定義.*番号は、タイプの直後でも変数名の前でもかまいません.


  • 例:書き込み可能:
    int* pnsize;
    

    次のように書くこともできます.
    int *pnsize;
    

    しかし、書くことはできません.
    int * pnsize;
    
  • クラスのメンバー関数内で非メンバー関数を呼び出す場合は、非メンバー関数の名前に「::」を付ける必要があります.

  • 関数エントリパラメータにデフォルト値がある場合は、説明を注記します.


  • 例:
    BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace /* = TRUE */);
    

    または、
    BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace // = TRUE );
    
  • else ifは1行に書かなければなりません.

  • 「{」、「}」に関する諸規定:
  • 9.1'{'、'}'は1行を独占する必要があります.行にコメントを付けることができます.


  • 例:正しい:
    for (i = 0; i < cbLine; i++)
    { // .....
        printf("Line %d:", i);
        printf("%s
    ", pFileLines); } : for (i = 0; i < cb; i++) {printf("Line %d:", i);
    printf("%s
    ", pFileLines);}
  • 9.2'{'は別の行で、'{'の後のコードはTabにインデントする必要があります.'{'と'}'は同じ列でなければなりません.


  • 例:正しい:
    if (i > 0)
    {
      m = 1;
      n++; }

    書いてはいけません:
    if (i > 0) {
    m = 1;
    n++;
    }
    

    例外:
    if (i == 0)
    { ASSERT(FALSE); return; }
    
  • 9.3ループ、ブランチの後に1行のコードしかない場合は、「{'、{}」は省略できますが、推奨されません.省略すると曖昧になる可能性がある場合は、「{」、「}」を付けなければならない.

  • スペースに関する各規定.
  • 10.1すべての2つの演算子、3つの演算子の両方にスペースが必要です.単一演算子の両端にスペースは必要ありません.ところが['、']などの演算子の前後、および'&'(アドレス取り)、'*'(値取り)などの演算子の後にスペースを空けてはいけません.


  • 例:正しい:
    int n = 0, nTemp;
    for (int i = nMinLine; i <= nMaxLine; i++)
    

    書いてはいけません:
    int n=0, nTemp;
    for ( int i=nMinLine; i<=nMaxLine; i++ )
    
  • 10.2 for、while、ifなどのキーワードの後に1つのスペースがあるべきで、更に‘(’,その後にスペースがない;最後の‘)’の前にスペースがあってはならない.


  • 例:正しい:
    if (-2 == n)
    

    書いてはいけません:
    if(-2 == n)
    

    または
    if ( -2 == n )
    
  • 10.3関数、マクロを呼び出す場合、「('、')」の前後にスペースを空けてはいけません.


  • 例:正しい:
    printf("%d
    ", nIndex);

    書いてはいけません:
    printf ("%d
    ", nIndex); printf( "%d
    ", nIndex );
  • 10.4型強制変換の場合、"(’’’)"の前後にスペースがあることはできません

  • 例:書き込み可能:
    (KSFile*)pFile;
    

    次のように書くこともできます.
    (KSFile *)pFile
    

    書いてはいけません:
    ( KSFile* )pFile
    
    ( KSFile * ) pFile
    
  • インデントに関する諸規定
  • 11.1インデントはTab単位です.1 Tabは4スペース
  • 11.2次の場合、コードはTabにインデントされます.
  • 関数体相対関数名および「{」、「}」.




  • 例:
    int Power(int x)
    {
      return (x * x);
    }
    
  • if、else、for、while、doなどの後のコード.



  • 行以内には書けません.折り曲げた後のコードは、合理的な位置で折り曲げなければなりません.+-*/などの演算子がある場合は、次の行の先頭ではなく、前の行の末尾に演算子を配置します.



  • 11.3以下の場合、switch以降のcase、defaultをインデントする必要はありません.


  • 例:
    switch (nID)
    {
    case ID_PLAY:
      ......
      break;
    case ID_STOP:
      ......
      break;
    default:
      ......
      break;
    }