Skip to content

Instantly share code, notes, and snippets.

@mntone
Last active December 28, 2015 14:09
Show Gist options
  • Save mntone/7513279 to your computer and use it in GitHub Desktop.
Save mntone/7513279 to your computer and use it in GitHub Desktop.
mntone のコーディングスタイル(日本語版)。英語版は必要になったら書く予定。

私「mntone」の C++ コーディングスタイルについて

コーディングスタイル基本則

ポインター、リファレンス、ハンドル、トラッキングリファレンスなど

それぞれ型側に近づけて記述する

const T* const value
const T& value
const T^ value
const T% value

※ const は前置してください

タブ、スペースなどのインデント

タブで、そのタブは 4 の幅とする

かっこ則

()

かっこの内側に必ずスペースを入れる

func( value );

ただし、引数 0 の場合はスペースは不要

func();

<>, []

かっこの内側にスペースを入れない

{}

基本的に先頭を揃える

{
	func();
}

ただし、中身がからの場合、1 つのスペースを入れて同一行に記述する。

{ }

改行

include、using、関数、などで 1 つの改行を含める (このとき 2 行以上に改行は入れない)。 意味のまとまりで構文に改行をいれることも可。

ブロック

任意の位置にブロック化できる。

for( size_t i = 0u; i < 4; ++i )
{
	if( i == 1 )
	{
		func();
	}
}

関数の呼び出し

原則、1 行に収める。

func( a, b );

しかし、FWXGA フルスクリーンで収まりきらないものは原則改行を行う。

func(
	a,
	b );

コンストラクター

既定の動作をする場合、以下のように記述する。

class sample
{
public:
	sample() = default;
};

動作を変更する場合、次のように記述する。

class sample
{
public:
	sample( const int a, const int b )
		: a_( a )
		, b_( b )
	{ }

private:
	int a_, b_;
};

WinRT 命名規則

WinRT オブジェクトにおいて、メソッド(C++ ではメンバー関数)、プロパティーはパスカルケースを用いる。フィールド(C++ ではメンバー変数)は原則キャメルケース、末尾にアンダーバー () だが、プロパティーに対応するフィールドはパスカルケースに末尾アンダーバー () とする。また、メンバー関数の仮変数は、キャメルケースを用いる。

ref class Sample
{
public:
	void Func( int64 sampleValue );

public:
	property int32 A
	{
		int32 get() { return A_; }
		void set( int32 value ) { A_ = value; }
	}
	property int32 B
	{
		int32 get() { return B_; }
		void set( int32 value ) { B_ = value; }
	}

private:
	int32 A_, B_;
};

なお、内部におけるローカル変数、非 WinRT オブジェクト(クラス、構造体、共用体)はスネークケースを用いる(基本 STL 準拠)。また、上から順番にメソッド、イベント、プロパティー、フィールドの順番に並べる。

Visual Studio で設定する場合…

Visual Studio の C/C++ の書式設定について記述します

インデント

  • □ 中かっこのインデント
  • かっこ内で、入力した新しい行を揃える
    • ● 新しい行をインデント
  • □ 既存のコードで、かっこ内で改行を揃える設定を使用する
  • ☑ case の内容をインデントする
  • □ case ラベルをインデントする
  • goto ラベルの位置
    • ● 左に 1 インデント
  • □ アクセス指定子のインデント

改行

  • 初めのかっこの位置
    • 名前空間の始めかっこの位置
      • ● 自動再配置しない
    • 型、関数、コントロール ブロック、ラムダの始めかっこの位置
      • ● 新しい行へ移動
  • 終わりかっこの位置
    • ☑ 型が空の場合は、終わりかっこを始めかっこと同じ行に移動します
    • ☑ 関数の本体が空の場合は、終わりかっこを始めかっこと同じ行に移動します
  • キーワードの位置
    • ☑ 新しい行に 'else' を配置する
    • ☑ 新しい行に 'catch' および類似キーワードを配置する
    • □ 'while' を新しい行の do-while ループに配置する

行間

  • 関数のかっこのスペース
    • □ 引数リストの関数名と始めかっこの間にスペースを挿入する
    • ☑ 引数リストのかっこ内にスペースを挿入する
    • □ 引数リストが空の場合に、かっこ間にスペースを挿入する
  • コントロール ブロックのスペース
    • □ 制御フロー ステートメントないのキーワードと始めかっこの間にスペースを挿入する
    • ☑ コントロール ステートメントのかっこ内にスペースを挿入する
  • ラムダのスペース
    • □ ラムダ引数リストの始めかっこの前にスペースを挿入する
  • C スタイル キャストのスペース
    • □ C スタイル キャストのかっこ内にスペースを挿入する
    • □ C スタイル キャストの終わりかっこの後にスペースを挿入する
  • 式のスペース
    • ☑ かっこで囲んだ式のかっこ内にスペースを挿入する
  • かっこのスペース
    • ☑ 空のかっこの間にスペースを挿入する
    • □ 均一初期化および初期化子リストの始めかっこの前にスペースを挿入する
    • ☑ 均一初期化および初期化子リストのかっこ内にスペースを挿入する
  • 大かっこのスペース - □ 始め角かっこの前にスペースを挿入する
    • □ 角かっこ内にスペースを挿入する
    • □ 空の角かっこの前にスペースを挿入する
    • □ 空の角かっこの間にスペースを挿入する
    • ☑ 多次元配列の角かっこを一緒にグループ化
    • □ ラムダの角かっこ内にスペースを挿入する
    • □ ラムダの空の角かっこの間にスペースを挿入する
  • 区切り記号のスペース
    • □ コンマの前にスペースを挿入する
    • ☑ コンマの後にスペースを追加する
    • ☑ メンバー演算子の前後のスペースを削除する
    • □ 型宣言で、基本のコロンの前にスペースを挿入する
    • □ コンストラクターのコロンの前にスペースを追加する
    • ☑ セミコロンの前のスペースを削除する
    • ☑ セミコロンの後にスペースを追加する
  • 演算子のスペース
    • ☑ 単項演算子とそのオペランドの間のスペースを削除する
    • バイナリ、代入、条件演算子
      • ● バイナリ、代入、条件演算子の前後にスペースを挿入する

折り返し

  • ブロックの折り返しオプション
    • ● 1 行のコード ブロックを折り返さない
mntone’s style::C++ コーディング規則, Copyright (C) 2014 mntone, 3/24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment