Top > C++ > コーディング規則

はじめに Edit

このページの意味 Edit

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

キャメルとは Edit

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

POD型とは Edit

メンバ変数にコンストラクタを呼ぶものがない型が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以外なら '_' は除去。
s + キャメル。
private以外ならキャメル。

static関数・メンバ関数 Edit

小文字から始まるキャメルで。
privateに記述する場合,頭に'_'。
static関数はキャメル。
メンバ関数は小文字から始まるキャメル。

内部クラス・構造体 Edit

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

列挙型 Edit

enumのこと。

列挙型名 Edit

キャメルで。

要素名 Edit

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

名前空間 Edit

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

記述順番は次の通り。

タイプ1.タイプ宣言。

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

例:

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 
-
|
|
-
|
!
!
 
namespace ns
{
  using ::Foo;
  class Hoge
  {
 
  };
}

タイプ2.前方参照

  • class タイプ名
  • struct タイプ名
    (abc順)

例:

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
 
-
|
|
!
 
namespace ns
{
 class Hoge;
 struct Foo;
}

名前 Edit

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

マクロ Edit

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

インデント Edit

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

中括弧 Edit

中括弧は次のように,縦のラインをそろえること。
ただし,命令が1つの場合は,一行にまとめてよい。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 
-
|
-
!
|
!
 
 
 
void main()
{
  while(1)
  {
  }
 
}
 
int getOne(){ return 1; }

インクルード 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ヘッダ1ソース Edit

1つのヘッダファイル2つ以上の型を宣言しない。
ファイル名には,宣言した型の名前を用いる。
また,ヘッダに対応したソースファイルを必ず用意する。

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

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

名前空間.h Edit

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

ディレクトリ構造

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

util.hの中身

Everything is expanded.Everything is shortened.
  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 どちらも使用禁止。他のシンボルと衝突する可能性があるため。

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: (4205d)