はじめに
このページの意味
- 忘れないようにメモっておく。
- 自分のコードでこれに違反してたらただちに取り締まる。
キャメルとは
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すべし”ということを書くこと。
公開するものに略称は使用しない
原則として,型名,関数名など
公開するもに略称を使用してはいけない。
using namespaceは使用禁止
- hpp/cpp どちらも使用禁止。他のシンボルと衝突する可能性があるため。