C++スタイルガイド

C++ Style Guide

概要 Abstract
スタイルガイドとは,C++のソースコードの記述形式におけるガイドラインである.コードの記述に一定のルールを定めることで,可読性を向上させ,ケアレスミスを防ぐことを目的とする.
The C++ Style Guide is a guideline for the description format of C++ source code. It's purpose is to improve the readability of the code and to reduce the careless mistakes under specific rules.
ノート Note
ここで示すガイドは一例である.個々のプロジェクト,チーム,グループの方針に従うこと.
This guide is an example. You should follow the policy of your own project, team, or group.

命名規則 Naming rule

標準命名規則 Standard Naming Rule

  • ISO/IEC:14882:2003 に従う.
ISO/IEC:14882:2003 - 17.4.3.1.2 Global names
Certain sets of names and function signatures are always reserved to the implementation:
Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.
Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.
  • ダブルアンダースコアを含む名前は用いない
  • アンダースコアで始まる名前も用いない
  • 省略語は極力避ける (e.g. RmvWord (bad), RemoveWord (good)).
    • 他者による可読性を保持するため.
  • 名前空間名: 小文字のみ.アンダースコア(_)で単語を区切る.
  • グローバル変数: 各単語を大文字で始めて,TestData のように連結する.アンダースコア(_)を使わない.先頭も大文字とする
NOTE
先頭のみ小文字で始めるスタイルも存在する.だが,一単語の場合にローカル変数と同じになってしまい,紛らわしいので,大文字から始めるスタイルを採用する.
  • グローバル関数: 同上.ただし,動詞で始める (e.g. RemoveElement).
  • ローカル変数: 各単語を小文字のみで構成し,アンダースコア(_)で連結する.ただし,末尾にはアンダースコアを付加しない(private/protected メンバ変数と区別するため).
  • ローカル関数(static関数): 同上.ただし,動詞で始める (e.g. remove_element).
  • 定数: 各単語を大文字のみで構成し,アンダースコア(_)で連結する (e.g. TEST_INDEX).
  • マクロ名: 定数と同じ(ただし,マクロの使用は控えること.まずはインライン関数・定数変数の使用を検討すること).
  • 型名(クラス,構造体,共用体,enum,typedef された型): グローバル変数と同様に,各単語を大文字で始めて連結する.さらに,T を先頭に付加する (クラス内で定義された型も同様).
  • 列挙子名: グローバル変数と同様に,各単語を大文字で始めて連結する.さらに,enum の型名から先頭のTを除き,残りの大文字(==単語の先頭)を並べたものを小文字に変換し,先頭に付加する.
    • e.g. enum TPaintType {ptTransparent, ptFill}; (列挙子名の先頭に pt (Paint Type) が付いている).
    • e.g. enum TModuleArchitectureKind {makFlatStructure, makHierarchicalStructure} (列挙子名の先頭に mak が付いている).
  • public メンバ変数: グローバル変数と同じ.
    • ただし,クラスでは原則使わない.private/protected メンバ変数を使用し,アクセサ・ミューテータを定義すること.
  • public メンバ関数: グローバル関数と同じ.ただし,
    • アクセサ: アクセスしたいメンバ変数の,単語の先頭を大文字にし,アンダースコアを除いた名前にする.
      • e.g. アクセスしたいメンバ変数 hoge_huge_ に対し, HogeHuge のように命名する.
    • ミューテータ: アクセサの前に Set を付加する (e.g. SetHogeHuge).
  • private/protected メンバ変数: 小文字とアンダースコア(_)で構成する.末尾にアンダースコアを付加する
  • private/protected メンバ関数: 小文字とアンダースコア(_)で構成する.末尾にアンダースコアは付加しない
  • 関数引数: ローカル変数と同じ.
  • テンプレート引数: 各単語を小文字のみで構成し,アンダースコア(_)で連結する.ただし,t_ で始める (e.g. t_iterator).
  • マクロ引数: マクロ定義の引数は,すべて小文字で, x_ で始める (e.g. x_value).

拡張命名規則

  • SkyAI モジュール: SkyAI モジュールとは, TModuleInterface クラスの下位クラスである.SkyAI モジュールはクラスだが, T ではなく M で始める (e.g. MLearningManager).
    • Module をクラス名に含めない.
  • ポート: すべて小文字.アンダースコアで単語を区切る.末尾にアンダースコアを付加しない
  • signal-port, slot-port, in-port, out-port はそれぞれ signal_ , slot_ , in_ , out_ で始める.

フォーマット規則 Formatting rule

  • 文字コード: ASCIIかUTF-8を使うこと.

インデントスタイル Indent style

  • インデント: インデントの単位はスペース2個とする.タブは使ってはならない.
  • 中括弧の位置: 以下に合わせること:
    if(condition)
    {
    }
    if(condition)
    {
    }
    else
    {
    }
    for(init; condition; after)
    {
    }
    while(condition)
    {
    }
    switch(variable)
    {
    case CASE1:
      SENTENCES
      break;
    ...
    default:
      SENTENCES
    }
    return_type Function(arguments)
    {
    }

References


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-04-04 (木) 10:51:07 (1932d)