コード規約 Edit

C++ Edit

hpp

ソースコード 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
-
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
!
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
-
|
|
!
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
-
|
|
!
|
!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#spanadd
// [パスカル形式]
#spanend
#spanadd
// ・単語の頭を大文字,それ以外を小文字で表記する方法。
#spanend
#spanadd
//  例:SuperVector3
#spanend
#spanadd
//
#spanend
#spanadd
// [キャメル形式]
#spanend
#spanadd
// ・パスカル形式と基本的に同じで最初の一文字目だけ小文字で表記する方法。
#spanend
#spanadd
//  例:superVector3
#spanend
#spanadd
//
#spanend
#spanadd
// [略語について]
#spanend
#spanadd
// ・Microsoft C#方式をとり,2文字以下と3文字以上で分ける。
#spanend
#spanadd
//  例:Identity = ID(パスカル) id(キャメル)
#spanend
#spanadd
//    Object = Obj(パスカル) obj(キャメル)
#spanend
#spanadd
//      Hyper text markup language = Html(パスカル) html(キャメル)
#spanend
#spanadd
//
#spanend
#spanadd
// [宣言]
#spanend
#spanadd
// ・static変数の初期化コードで他のstatic変数・関数にアクセスすることがないようにする。
#spanend
#spanadd
//
#spanend
#spanadd
// [スコープ]
#spanend
#spanadd
// ・原則,括弧の位置は縦に揃える。ただし下記の場合のみ例外。
#spanend
#spanadd
//  ・namespaceの宣言。
#spanend
#spanadd
//  ・1行で記述したほうが見栄えがいいとき。 例: if ( hoge ) { foo = false; }
#spanend
#spanadd
// ・スコープ括弧が省略できる文は省略してはならない。必ず括弧をつけること。
#spanend
#spanadd
//
#spanend
#spanadd
// [using]
#spanend
#spanadd
// ・using namespaceおよびusingは関数の実装でのみ使ってよい。
#spanend
#spanadd
//  それ以外の箇所での使用はシンボルの衝突がおこる可能性があるため禁止。
#spanend
#spanadd
//
#spanend
#spanadd
// [doxygen関連]
#spanend
#spanadd
// ・ユーザーが直接触ることがないシンボルに対するコメントはdoxygenスタイルで書いてはいけない。
#spanend
#spanadd
// ・doxygenコメントで使用してよいタグリスト。これ以外は使用禁止。
#spanend
#spanadd
// @code @endcode @n @e @ref @addtogroup
#spanend
#spanadd
// 以下のものはこの順番で記述すること。
#spanend
#spanadd
// @copydoc
#spanend
#spanadd
// @brief
#spanend
#spanadd
// @return
#spanend
#spanadd
// @param
#spanend
#spanadd
// @see
#spanend
#spanadd
// @details
#spanend
#spanadd
// ・doxygenの@name機能は原則使用禁止。シンボルはabcの名前でsortしたいため。
#spanend
#spanadd
 
#spanend
#spanadd
// [class][struct][union]
#spanend
#spanadd
// classは非POD型,structはPOD型で使い分ける。
#spanend
#spanadd
class Class
#spanend
    // 継承クラスの記述順番は次の通り。
    // ・実装があるクラス(1つまで)。
    // ・インターフェースクラス(何個でも)。
    : public Base
    , public ICallback
#spanadd
{
#spanend
#spanadd
public: // public,protected,privateの順番。
#spanend
    // 定義・宣言の順番
    // 1. 型
    // 2. static変数
    // 3. static関数
    // 4. インスタンス変数
    // 5. デフォルトコンストラクタ
    // 6. その他コンストラクタ
    // 7. デストラクタ
    // 8. インスタンス関数
    // 9. 継承関数実装
    // 10. 実装都合用変数
#spanadd
 
#spanend
    // 各要素の名前の付け方。
    struct PublicType {};
    static int  PublicStaticVar;
    static void PublicStaticFunc();
    int  publicVar;
    void publicFunc();
    int  forImplementPublicVar_; // 「POD型のメンバ変数だけどユーザーが直接アクセスするものでない」といった実装の都合でpublicに置いている変数はこの名前の付け方。
#spanadd
protected:
#spanend
    // 定義順はpublicと同じ。
#spanadd
 
#spanend
    // 各要素の名前の付け方。
    struct ProtectedType {};
    static int  protectedStaticVar;
    static void ProtectedStaticFunc();
    int  protectedVar;
    void protectedFunc();
    
#spanadd
private:
#spanend
    // 定義順はpublicと同じ。
#spanadd
 
#spanend
    // 各要素の名前の付け方。
    strict PrivateType {};
    static int  sPrivateStaticVar;
    static void PrivateStaticFunc();
    int  mPrivateVar;
    void privateFunc();
#spanadd
};
#spanend
#spanadd
 
#spanend
#spanadd
// enumの説明。
#spanend
#spanadd
struct ColorKind
#spanend
#spanadd
{
#spanend
    enum enum_t
    {
        // 定義・宣言の順番
        // 1. 列挙値の定義
        // 2. TERMINATE,MIN,MAXの定義
        // 3. エイリアス値の定義
        Red,
        Green,
        Blue,
        // term
        TERM,
        MIN = 0,
        MAX = TERM-1,
        // alias
        Default = Blue
    };
#spanadd
};
#spanend
#spanadd
 
#spanend
#spanadd
// [namespace]
#spanend
#spanadd
// 名前空間のスコープはinは1行1名前空間,outは一気に。
#spanend
#spanadd
// 括弧の位置は下記の例に習う。
#spanend
#spanadd
namespace RootName {
#spanend
#spanadd
namespace InName {
#spanend
#spanadd
}}
#spanend
#spanadd
namespace {
#spanend
    // [無名空間]
    // 定義順は下記の通り。
    // 1. 型定義
    // 2. 変数定義。
    // 3. 関数定義。
    //
    // 無名空間の名前付けルールは下記の通り。
    struct tType {};
    int  tVar;
    void tFunc();
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd
// [function]
#spanend
#spanadd
// ・非インスタンスな関数の記述は禁止。
#spanend
#spanadd
//  他のヘッダとぶつかる可能性があるため関数をnamespace直下に書いてはいけない。
#spanend
#spanadd
//  structやclassのstatic関数として記述する。
#spanend
#spanadd
struct FunctionSet
#spanend
#spanadd
{
#spanend
    // 引数の名前は a + パスカル。
    // 引数が2つ以上の場合は改行する。
    // 括弧の位置は下記に習う。
    static void Func(
        int aArg1
        , bool aArg2
        )
    {
        // ローカル変数の名前は下記の通り。
        int localVar;
    }
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd
// [macro]
#spanend
#spanadd
// 名前は大文字とアンダーバーでのみ構成できる。アンダーバーは単語の区切りに使う。
#spanend
#spanadd
#define MACRO_CONSTANT (1)
#spanend
#spanadd
#define MACRO_FUNC( aVar ) do{}while(false)
#spanend
#spanadd
// 名前の衝突がおきないように,cppローカルなmacroは頭にtをつけること。
#spanend
#spanadd
#define tMACRO_DEBUG_MODE (true)
#spanend
#spanadd
 
#spanend
#spanadd
// [preprocessor]
#spanend
#spanadd
// #ifもインデントすること。
#spanend
#spanadd
#if defined(DEBUG_VERSION)
#spanend
    #include "Debug.hpp"
#spanadd
#endif
#spanend
#spanadd
 
#spanend
#spanadd
ヘッダファイル
すべてを展開すべてを収束
  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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
!
|
|
|
|
|
|
|
|
#spanend
/**
 * @file
 * @brief このファイルに対する説明。
 * @author ファイル作成者名。
 */
#spandel
#if defined(モジュール名_INCLUDED_大文字ファイル名_HPP)
#spanend
#spanadd
#if defined(大文字モジュール名_INCLUDED_大文字ファイル名_HPP)
#spanend
#else
#spandel
#define モジュール名_INCLUDED_大文字ファイル名_HPP
#spanend
#spanadd
#define 大文字モジュール名_INCLUDED_大文字ファイル名_HPP
#spanend
 
//-----------------------------------------------------------
// インクルードするものがあればここに記述。
// システムヘッダインクルード(abc順) -> 通常ヘッダインクルード(abc順) の順番。
#include <XBase/Matrix34.hpp>
#include <XBase/Vector3.hpp>
#spandel
#include "app/EntryPoint.hpp"
#spanend
#spanadd
#include "App/EntryPoint.hpp"
#spanend
 
//-----------------------------------------------------------
namespace モジュール名 {
 
    // ・クラスなどシンボルを記述する場合原則は1ヘッダ1クラス。
    // ・他のヘッダとぶつかる可能性があるため関数をnamespace直下に書いてはいけない。
    //  structやclassのstatic関数として記述する。
    // ・ユーザーが直接触ることがないシンボルに対するコメントはdoxygenスタイルで書いてはいけない。
    // ・doxygenコメントで使用してよいタグリスト。
    // @code @endcode @n @e @ref
    // 以下のものはこの順番で記述すること。
    // @copydoc
    // @brief
    // @return
    // @param
    // @see
    // @details
 
    /// クラスに対する説明
    class Class
    {
    public: // public,protected,privateの順番。
        // 非インスタンスシンボル -> インスタンスシンボルの順番。
        // 1. enum / class /struct /typedef 
        // 2. static変数
        // 3. static関数
        // 4. インスタンス変数
        // 5. コンストラクタ・デストラクタ
        // 6. インスタンス関数
#spanadd
}
#spanend
#spanadd
//-----------------------------------------------------------
#spanend
#spanadd
// EOF
#spanend
#spanadd
       // doxygenのグルーピング機能は使用禁止。
       // シンボルはabcの名前でsortしたいため。
ソースファイル
すべてを展開すべてを収束
  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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
!
|
|
|
|
-
 
 
 
 
 
 
 
 
-
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
!
 
 
 
 
 
!
|
|
|
|
#spanend
#spanadd
/**
#spanend
 * @file
 * @brief このファイルに対する説明。
 * @author ファイル作成者名。
 */
#spanadd
#include "Hoge/Foo.hpp" // 実装対象となるヘッダファイル。
#spanend
 
        // 型の名前は
#spanadd
//-----------------------------------------------------------
#spanend
#spanadd
// インクルードするものがあればここに記述。
#spanend
#spanadd
// システムヘッダインクルード(abc順) -> 通常ヘッダインクルード(abc順) の順番。
#spanend
#spanadd
#include <XBase/Matrix34.hpp>
#spanend
#spanadd
#include <XBase/Vector3.hpp>
#spanend
#spanadd
#include "App/EntryPoint.hpp"
#spanend
 
    private:
        // 定義順はpublicと同じ。
    };
#spanadd
//-----------------------------------------------------------
#spanend
#spanadd
namespace Hoge {
#spanend
#spanadd
//-----------------------------------------------------------
#spanend
#spanadd
// 無名空間が必要なら随時挿入。
#spanend
#spanadd
namespace {
#spanend
#spanadd
}
#spanend
#spanadd
//-----------------------------------------------------------
#spanend
#spanadd
// 実装順番はhppに記述されているものに合わせる。
#spanend
#spanadd
// 名前空間の中だからといってインデントをする必要はない。
#spanend
#spanadd
void Foo::func()
#spanend
#spanadd
{
#spanend
#spanadd
}
#spanend
 
#spanadd
//-----------------------------------------------------------
#spanend
}
//-----------------------------------------------------------
#spanadd
// EOF
#spanend

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