#contents * はじめに [#d8eca1f0] ** このページの意味 [#za4d934d] - 忘れないようにメモっておく。 - 自分のコードでこれに違反してたらただちに取り締まる。 ** キャメルとは [#i82efb4e] AbstractList,ObjectInformation,など 単語の頭が大文字にしたやつのこと,らしい。 ** POD型とは [#z4599007] メンバ変数にコンストラクタを呼ぶものがない型がPOD型,と認識している。 //初期化の際に,newを必要としないものをPOD型,と認識している。 //つまり,メンバ変数にクラスのポインタを所持し, //それをコンストラクタでnewするものは非POD型。 * コーディングルール [#zf8e8e0b] ** クラス [#z695aad5] 非POD型はclassで定義する。 書式は次の通り。 - 公開修飾子はpublic,protected,privateの順番 - 要素の順番 -- typedef -- static定数 -- static変数 -- static関数 -- メンバ変数 -- コンストラクタ --- デフォルトコンストラクタ --- コピーコンストラクタ --- その他のコンストラクタ -- デストラクタ -- メンバ関数 -- 内部クラス・構造体 ** 構造体 [#m03db4b4] POD型はstructで定義する。 ** クラス・構造体名 [#zb581415] キャメル。 ** typedef [#v2a2a6c6] キャメルで。 privateなら + '_' 。 ** static定数 [#d2281924] 全部大文字,単語の区切りは'_'。 ** static変数・メンバ変数 [#dd7cfbd6] 基本としてprivateに書くこと! %%小文字から始まるキャメル + '_'。%% %%private以外なら '_' は除去。%% ''s'' + キャメル。 private以外ならキャメル。 ** static関数・メンバ関数 [#o5332c29] %%小文字から始まるキャメルで。%% %%privateに記述する場合,頭に'_'。%% static関数はキャメル。 メンバ関数は小文字から始まるキャメル。 ** 内部クラス・構造体 [#tca7969d] キャメルで。 %%privateなら + '_' 。%% ** 列挙型 [#j1b651ee] enumのこと。 *** 列挙型名 [#oe1ae345] キャメルで。 *** 要素名 [#tbee3e6a] 列挙型名 + '_' + キャメルで。 ** 名前空間 [#ec304136] namespaceのこと。 名前空間直下に変数・関数の記述は禁止。 記述順番は次の通り。 タイプ1.タイプ宣言。 - using タイプ名。 - タイプ宣言。 (abc順) 例: #code(c,){{ namespace ns { using ::Foo; class Hoge { }; } }} タイプ2.前方参照 - class タイプ名 - struct タイプ名 (abc順) 例: #code(c,){{ namespace ns { class Hoge; struct Foo; } }} *** 名前 [#t5a1b353] 小文字。単語の区切りにアンダーバーを使ってよい。 ** マクロ [#hb2f2367] 定数マクロなら,定数と同じ命名規則で。 %%関数っぽいマクロ( ex. abs() )なら,関数と同じ命名規則で。%% ** インデント [#u228f01a] %%タブを使うこと。(タブサイズは4)%% タブは使用禁止。全て半角スペースで表現すること。(環境によって見え方が変わることを防ぐため) インデントサイズは4。 ** 中括弧 [#yec03e00] 中括弧は次のように,縦のラインをそろえること。 ただし,命令が1つの場合は,一行にまとめてよい。 #code(c,){{ void main() { while(1) { } } int getOne(){ return 1; } }} ** インクルード [#lb8f1088] *** インクルード順番 [#zcc16dae] 1.システムヘッダabc順 2.ユーザーヘッダabc順 *** インクルードガード [#ed4f928a] インクルードガードは#ifdefでは書かない。 #pragma once にする。 ** ヘッダの形式 [#z470abaf] 1.インクルードガード 2.インクルード 3.前方参照 4.型宣言 ** ソースの形式 [#s1a6ea72] 1.実装するヘッダのインクルード 2.インクルード 3.using 4.無名空間 5.ヘッダの記述順に実装 ** グローバル変数・グローバル関数 [#x22b7284] 使用しない。 ** inline [#u67d7415] %%inlineキーワードは使用しない。(コンパイラにがんばらせる)%% 書かないといけない場合を除いて使用しない。 ** virtual [#c7de0e27] virtualキーワードは何よりも先に記述する。 ** const [#z690ba58] 変数に対するconstキーワードはタイプ名の直前に付ける。 * ファイルルール [#a1d18db2] ** 拡張子 [#q526aa0f] .h : Cヘッダ .c : Cソース .hpp : C++ヘッダ .cpp : C++ソース .pch : プリコンパイルヘッダ ** 1タイプ1ヘッダ1ソース [#cc20db25] 1つのヘッダファイル2つ以上の型を宣言しない。 ファイル名には,宣言した型の名前を用いる。 %%また,ヘッダに対応したソースファイルを必ず用意する。%% ** 1名前空間1ディレクトリ [#i242cb19] 1つの名前空間に対して1つのディレクトリを作成する。 ディレクトリ名には,名前空間をそのまま使用する。 ** 名前空間.h [#t1fdb843] 次のような感じで,名前空間で公開すべきヘッダをインクルード記述した名前空間.hを設置する。 ディレクトリ構造 mylib +--util.h +--util | +--RingBuff.hpp | +--RingBuff.cpp util.hの中身 #code(c,){{ /** @file @brief utilモジュールの公開ヘッダファイルのincludeを記述する **/ #pragma once #include <mylib/util/RingBuff.hpp> }} * ポリシー [#l61420f9] ** newしたクラスがdeleteする [#hd7e1079] 原則として,newしたクラスが責任を持ってdeleteする。 ただし,FactoryMethodなどで,newしたものを渡すときは例外とし, その場合はコメントに”必ずdeleteすべし”ということを書くこと。 ** 公開するものに略称は使用しない [#d4b64955] 原則として,型名,関数名など 公開するもに略称を使用してはいけない。 ** using namespaceは使用禁止 [#b35b9b79] - hpp/cpp どちらも使用禁止。他のシンボルと衝突する可能性があるため。 |