create a new page, using
C++/コーディング規則
as a template.
Front page
Search
Recent changes
Help
Wiki書式ヘルプ(整形ルール)
Start:
#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]
次のような感じで,名前空間で公開すべきヘッダをインクルー...
ディレクトリ構造
mylib
+--util.h
+--util
| +--RingBuff.hpp
| +--RingBuff.cpp
util.hの中身
#code(c,){{
/** @file @brief utilモジュールの公開ヘッダファイルのincl...
#pragma once
#include <mylib/util/RingBuff.hpp>
}}
* ポリシー [#l61420f9]
** newしたクラスがdeleteする [#hd7e1079]
原則として,newしたクラスが責任を持ってdeleteする。
ただし,FactoryMethodなどで,newしたものを渡すときは例外...
その場合はコメントに”必ずdeleteすべし”ということを書くこ...
** 公開するものに略称は使用しない [#d4b64955]
原則として,型名,関数名など
公開するもに略称を使用してはいけない。
** using namespaceは使用禁止 [#b35b9b79]
- hpp/cpp どちらも使用禁止。他のシンボルと衝突する可能性...
End:
#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]
次のような感じで,名前空間で公開すべきヘッダをインクルー...
ディレクトリ構造
mylib
+--util.h
+--util
| +--RingBuff.hpp
| +--RingBuff.cpp
util.hの中身
#code(c,){{
/** @file @brief utilモジュールの公開ヘッダファイルのincl...
#pragma once
#include <mylib/util/RingBuff.hpp>
}}
* ポリシー [#l61420f9]
** newしたクラスがdeleteする [#hd7e1079]
原則として,newしたクラスが責任を持ってdeleteする。
ただし,FactoryMethodなどで,newしたものを渡すときは例外...
その場合はコメントに”必ずdeleteすべし”ということを書くこ...
** 公開するものに略称は使用しない [#d4b64955]
原則として,型名,関数名など
公開するもに略称を使用してはいけない。
** using namespaceは使用禁止 [#b35b9b79]
- hpp/cpp どちらも使用禁止。他のシンボルと衝突する可能性...
Page: