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