コード規約 Edit

C++ Edit

ソースコード Edit

  • 文字コードはUTF8(コードページ65001)BOMあり。
  • 改行コードはCRLF。
  • タブは使用禁止。空白インデント幅4を使う。

ポリシー Edit

  • final版でフェールセーフにできる箇所はフェールセーフにする。
  • フェールセーフな関数とそうじゃない関数があるとき,フェールセーフの関数のほうを短い名前付けにする。
    • Copy()とCopyStrict()みたいな感じ。

その他 Edit

共通
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
 
-
-
!
-
|
|
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
-
|
|
|
|
|
|
|
-
|
|
!
!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// [キャメル]
// ・単語の頭を大文字,それ以外を小文字で表記する方法。
// ・略字は単語の先頭をなら大文字。そうでなければ小文字とする。
//  例:Identity = Id
//    Standard Template Library = STL
//
// [宣言]
// ・static変数の初期化コードで他のstatic変数・関数にアクセスすることがないようにする。
//
// [スコープ]
// ・原則,括弧の位置は縦に揃える。ただし下記の場合のみ例外。
//  ・namespaceの宣言。
//  ・1行で記述したほうが見栄えがいいとき。 例: if ( hoge ) { foo = false; }
// ・スコープ括弧が省略できる文は省略してはならない。必ず括弧をつけること。
//
// [using]
// ・using namespaceおよびusingは関数の実装でのみ使ってよい。
//  それ以外の箇所での使用はシンボルの衝突がおこる可能性があるため禁止。
//
// [doxygen関連]
// ・ユーザーが直接触ることがないシンボルに対するコメントはdoxygenスタイルで書いてはいけない。
// ・doxygenコメントで使用してよいタグリスト。これ以外は使用禁止。
// @code @endcode @n @e @ref @addtogroup
// 以下のものはこの順番で記述すること。
// @copydoc
// @brief
// @return
// @param
// @see
// @details
// ・doxygenの@name機能は原則使用禁止。シンボルはabcの名前でsortしたいため。
 
// [class][struct][union]
// classは非POD型,structはPOD型で使い分ける。
class Class
    // 継承クラスの記述順番は次の通り。
    // ・実装があるクラス(1つまで)。
    // ・インターフェースクラス(何個でも)。
    : public Base
    , public ICallback
{
public: // public,protected,privateの順番。
    // 定義・宣言の順番
    // 1. 型
    // 2. static変数
    // 3. static関数
    // 4. インスタンス変数
    // 5. デフォルトコンストラクタ
    // 6. その他コンストラクタ
    // 7. デストラクタ
    // 8. インスタンス関数
    // 9. 継承関数実装
 
    // 各要素の名前の付け方。
    struct PublicType {};
    static int  PublicStaticVar;
    static void PublicStaticFunc();
    int  publicVar;
    void publicFunc();
 
protected:
    // 定義順はpublicと同じ。
 
    // 各要素の名前の付け方。
    struct ProtectedType {};
    static int  protectedStaticVar;
    static void ProtectedStaticFunc();
    int  protectedVar;
    void protectedFunc();
    
private:
    // 定義順はpublicと同じ。
 
    // 各要素の名前の付け方。
    strict PrivateType {};
    static int  sPrivateStaticVar;
    static void PrivateStaticFunc();
    int  mPrivateVar;
    void privateFunc();
};
 
// enumの説明。
enum ColorKind
{
    // 定義・宣言の順番
    // 1. 列挙値の定義
    // 2. TERMINATE,MIN,MAXの定義
    // 3. エイリアス値の定義
    ColorKind_Red,
    ColorKind_Green,
    ColorKind_Blue,
    // term
    ColorKind_TERMINATE,
    ColorKind_MIN = 0,
    ColorKind_MAX = ColorKind_TERMINATE-1,
    // alias
    ColorKind_Default = ColorKind_Blue
};
 
// [namespace]
// 名前空間のスコープはinは1行1名前空間,outは一気に。
// 括弧の位置は下記の例に習う。
namespace RootName {
namespace InName {
}}
namespace {
    // [無名空間]
    // 定義順は下記の通り。
    // 1. 型定義
    // 2. 変数定義。
    // 3. 関数定義。
    //
    // 無名空間の名前付けルールは下記の通り。
    struct tType {};
    int  tVar;
    void tFunc();
}
 
// [function]
// ・非インスタンスな関数の記述は禁止。
//  他のヘッダとぶつかる可能性があるため関数をnamespace直下に書いてはいけない。
//  structやclassのstatic関数として記述する。
struct FunctionSet
{
    // 引数の名前は a + キャメル。
    // 引数が2つ以上の場合は改行する。
    // 括弧の位置は下記に習う。
    static void Func(
        int aArg1,
        bool aArg2
        )
    {
        // ローカル変数の名前は下記の通り。
        int localVar;
    }
}
 
// [macro]
// 名前は大文字とアンダーバーでのみ構成できる。アンダーバーは単語の区切りに使う。
#define MACRO_CONSTANT (1)
#define MACRO_FUNC( aVar ) do{}while(false)
// 名前の衝突がおきないように,cppローカルなmacroは頭にtをつけること。
#define tMACRO_DEBUG_MODE (true)
 
// [preprocessor]
// #ifもインデントすること。
#if defined(DEBUG_VERSION)
    #include "Debug.hpp"
#endif
ヘッダファイル
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
!
 
 
/**
 * @file
 * @brief このファイルに対する説明。
 * @author ファイル作成者名。
 */
#if defined(大文字モジュール名_INCLUDED_大文字ファイル名_HPP)
#else
#define 大文字モジュール名_INCLUDED_大文字ファイル名_HPP
 
//-----------------------------------------------------------
// インクルードするものがあればここに記述。
// システムヘッダインクルード(abc順) -> 通常ヘッダインクルード(abc順) の順番。
#include <XBase/Matrix34.hpp>
#include <XBase/Vector3.hpp>
#include "App/EntryPoint.hpp"
 
//-----------------------------------------------------------
namespace モジュール名 {
 
    // ・クラスなどシンボルを記述する場合原則は1ヘッダ1クラス。
 
}
//-----------------------------------------------------------
// EOF
ソースファイル
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
-
!
|
|
|
|
-
!
|
|
!
 
 
/**
 * @file
 * @brief このファイルに対する説明。
 * @author ファイル作成者名。
 */
#include "Hoge/Foo.hpp" // 実装対象となるヘッダファイル。
 
//-----------------------------------------------------------
// インクルードするものがあればここに記述。
// システムヘッダインクルード(abc順) -> 通常ヘッダインクルード(abc順) の順番。
#include <XBase/Matrix34.hpp>
#include <XBase/Vector3.hpp>
#include "App/EntryPoint.hpp"
 
//-----------------------------------------------------------
namespace Hoge {
//-----------------------------------------------------------
// 無名空間が必要なら随時挿入。
namespace {
}
//-----------------------------------------------------------
// 実装順番はhppに記述されているものに合わせる。
// 名前空間の中だからといってインデントをする必要はない。
void Foo::func()
{
}
 
//-----------------------------------------------------------
}
//-----------------------------------------------------------
// EOF

    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS