はじめに Edit

このページの意味 Edit

  • 忘れないようにメモっておく。
  • 自分のコードでこれに違反してたらただちに取り締まる。

キャメルとは Edit

AbstractList,ObjectInformation,など
単語の頭が大文字にしたやつのこと,らしい。

POD型とは Edit


初期化の際に,newを必要としないものをPOD型,と認識している。

つまり,メンバ変数にクラスのポインタを所持し,

それをコンストラクタでnewするものは非POD型。

メンバ変数にコンストラクタを呼ぶものがない型がPOD型,と認識している。

コーディングルール Edit

クラス Edit

非POD型はclassで定義する。
書式は次の通り。

  • 公開修飾子はpublic,protected,privateの順番
  • 要素の順番
    • typedef
    • static定数
    • static変数
    • static関数
    • メンバ変数
    • コンストラクタ
      • デフォルトコンストラクタ
      • コピーコンストラクタ
      • その他のコンストラクタ
    • デストラクタ
    • メンバ関数
    • 内部クラス・構造体

構造体 Edit

POD型はstructで定義する。

クラス・構造体名 Edit

キャメル。

typedef Edit

キャメルで。
privateなら + '_' 。

static定数 Edit

全部大文字,単語の区切りは'_'。

static変数・メンバ変数 Edit

基本としてprivateに書くこと!


小文字から始まるキャメル + '_'。

private以外なら '_' は除去。

小文字から始まるキャメル + '_'。

private以外なら '_' は除去。

s + キャメル。

private以外ならキャメル。

static関数・メンバ関数 Edit


小文字から始まるキャメルで。

privateに記述する場合,頭に'_'。

小文字から始まるキャメルで。

privateに記述する場合,頭に'_'。

static関数はキャメル。

メンバ関数は小文字から始まるキャメル。

内部クラス・構造体 Edit

キャメルで。


privateなら + '_' 。

privateなら + '_' 。

列挙型 Edit

enumのこと。

列挙型名 Edit

キャメルで。

要素名 Edit

列挙型名 + '_' + キャメルで。

名前空間 Edit

namespaceのこと。


名前空間直下に変数・関数の記述は禁止。

記述順番は次の通り。

タイプ1.タイプ宣言。

  • using タイプ名。
  • タイプ宣言。
    (abc順)

例:
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 
 
 
 
 
 
 
-
|
|
|
-
|
|
|
!
|
!
 
 
 
 
 
#spanend
#spanadd
 
#spanend
#spanadd
namespace ns
#spanend
#spanadd
{
#spanend
  using ::Foo;
  class Hoge
  {
#spanadd
 
#spanend
  };
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd

タイプ2.前方参照
  • class タイプ名
  • struct タイプ名
  • class タイプ名
    (abc順)

例:
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 
 
 
 
 
 
 
-
|
|
|
|
!
 
 
 
 
 
#spanend
#spanadd
 
#spanend
#spanadd
namespace ns
#spanend
#spanadd
{
#spanend
 class Hoge;
 struct Foo;
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd

名前 Edit


小文字から始まるキャメルで。

小文字。単語の区切りにアンダーバーを使ってよい。

マクロ Edit

定数マクロなら,定数と同じ命名規則で。


関数っぽいマクロ( ex. abs() )なら,関数と同じ命名規則で。

関数っぽいマクロ( ex. abs() )なら,関数と同じ命名規則で。

インデント Edit


タブを使うこと。(タブサイズは4)

タブを使うこと。(タブサイズは4)

タブは使用禁止。全て半角スペースで表現すること。(環境によって見え方が変わることを防ぐため)

インデントサイズは4。

中括弧 Edit

中括弧は次のように,縦のラインをそろえること。


ただし,命令が1つの場合は,一行にまとめてよい。
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 
-
|
-
!
|
|
|
!
 
 
 
 
 
 
 
void main()
{
  while(1)
  {
  }
#spanadd
 
#spanend
}
 
#spanadd
int getOne(){ return 1; }
#spanend
#spanadd
 
#spanend

インクルード Edit

インクルードガード Edit

インクルード順番 Edit


1.システムヘッダabc順

2.ユーザーヘッダabc順

インクルードガード Edit


インクルードガードは#ifdefでは書かない。

#pragma once にする。

ヘッダの形式 Edit


1.インクルードガード

2.インクルード

3.前方参照

4.型宣言

ソースの形式 Edit


1.実装するヘッダのインクルード

2.インクルード

3.using

4.無名空間

5.ヘッダの記述順に実装

グローバル変数・グローバル関数 Edit


使用しない。

inline Edit


inlineキーワードは使用しない。(コンパイラにがんばらせる)

書かないといけない場合を除いて使用しない。

virtual Edit


virtualキーワードは何よりも先に記述する。

const Edit


変数に対するconstキーワードはタイプ名の直前に付ける。

ファイルルール Edit

拡張子 Edit

.h : Cヘッダ
.c : Cソース
.hpp : C++ヘッダ
.cpp : C++ソース
.pch : プリコンパイルヘッダ

1タイプ1ヘッダ Edit

1タイプ1ヘッダ1ソース Edit


1つのヘッダファイル2つ以上の型を宣言しない。
ファイル名には,宣言した型の名前を用いる。

また,ヘッダに対応したソースファイルを必ず用意する。

1名前空間1ディレクトリ Edit

1つの名前空間に対して1つのディレクトリを作成する。
ディレクトリ名には,名前空間をそのまま使用する。

名前空間.h Edit

次のような感じで,名前空間で公開すべきヘッダをインクルード記述した名前空間.hを設置する。

ディレクトリ構造

mylib
+--util.h
+--util
|  +--RingBuff.hpp
|  +--RingBuff.cpp

util.hの中身

すべてを展開すべてを収束
  1
  2
  3
  4
  5
 
 
 
 
 
/** @file @brief utilモジュールの公開ヘッダファイルのincludeを記述する **/
#pragma once
 
#include <mylib/util/RingBuff.hpp>

ポリシー Edit

newしたクラスがdeleteする Edit

原則として,newしたクラスが責任を持ってdeleteする。
ただし,FactoryMethodなどで,newしたものを渡すときは例外とし,
その場合はコメントに”必ずdeleteすべし”ということを書くこと。

公開するものに略称は使用しない Edit

原則として,型名,関数名など
公開するもに略称を使用してはいけない。

using namespaceは使用禁止 Edit

  • hpp/cpp どちらも使用禁止。他のシンボルと衝突する可能性があるため。

    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS