* コード規約 [#m8a05d57] #contents ** C++ [#wc6ececc] *** ソースコード [#f828ee0e] - 文字コードはUTF8(コードページ65001)BOMあり。 - 改行コードはCRLF。 - タブは使用禁止。空白インデント幅4を使う。 *** ポリシー [#cb47bdb1] - final版でフェールセーフにできる箇所はフェールセーフにする。 - フェールセーフな関数とそうじゃない関数があるとき,フェールセーフの関数のほうを短い名前付けにする。 -- Copy()とCopyStrict()みたいな感じ。 *** その他 [#q707cb80] :共通| #code(c,){{ // [キャメル] // ・単語の頭を大文字,それ以外を小文字で表記する方法。 // ・略字は単語の先頭をなら大文字。そうでなければ小文字とする。 // 例: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 // 以下のものはこの順番で記述すること。 // @copydoc // @brief // @return // @param // @see // @details // ・doxygenのグルーピング機能は使用禁止。シンボルは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 }} :ヘッダファイル| #code(c,){{ /** * @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 }} :ソースファイル| #code(c,){{ /** * @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 }} |