Top > CrossFramework > コード規約

コード規約 Edit

C++ Edit

ソースコード Edit

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

ポリシー Edit

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

その他 Edit

共通
Everything is expanded.Everything is shortened.
  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
151
152
153
154
155
156
157
158
159
160
161
162
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
-
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
!
!
 
 
 
 
-
-
!
-
|
|
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
-
|
|
|
|
|
|
|
-
|
|
!
!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// [パスカル形式]
// ・単語の頭を大文字,それ以外を小文字で表記する方法。
//  例:SuperVector3
//
// [キャメル形式]
// ・パスカル形式と基本的に同じで最初の一文字目だけ小文字で表記する方法。
//  例:superVector3
//
// [略語について]
// ・Microsoft C#方式をとり,2文字以下と3文字以上で分ける。
//  例:Identity = ID(パスカル) id(キャメル)
//    Object = Obj(パスカル) obj(キャメル)
//      Hyper text markup language = Html(パスカル) html(キャメル)
//
// [宣言]
// ・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. 継承関数実装
    // 10. 実装都合用変数
 
    // 各要素の名前の付け方。
    struct PublicType {};
    static int  PublicStaticVar;
    static void PublicStaticFunc();
    int  publicVar;
    void publicFunc();
    int  forImplementPublicVar_; // 「POD型のメンバ変数だけどユーザーが直接アクセスするものでない」といった実装の都合でpublicに置いている変数はこの名前の付け方。
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の説明。
struct ColorKind
{
    enum enum_t
    {
        // 定義・宣言の順番
        // 1. 列挙値の定義
        // 2. TERMINATE,MIN,MAXの定義
        // 3. エイリアス値の定義
        Red,
        Green,
        Blue,
        // term
        TERM,
        MIN = 0,
        MAX = TERM-1,
        // alias
        Default = 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
ヘッダファイル
Everything is expanded.Everything is shortened.
  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
ソースファイル
Everything is expanded.Everything is shortened.
  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

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: (3839d)