Help us understand the problem. What is going on with this article?

個人的コーディング規約(C++)

More than 1 year has passed since last update.

あらまし

  • もうすぐC++とさよならしそうなので。
  • 以前参加していたプロジェクトのコーディング規約がWeb上で見れて良かったが、プロジェクト終了とともにアカウントがロックされ見れなくなってしまったので。

全般

・ヘッダファイルにはインクルードガードを使用する。名前は下記の通り。

インクルードガード.
#ifndef プロジェクト名_ファイル名_H
(#ifndef HOGE_PROJECT_HOGE_H)
// 略
#endif // HOGE_PROJECT_HOGE_H

※pragmaによるインクルードガードは使用しない。

スタイル

  • インデントはスペース4文字とする。
  • 名前空間の設定/使用後のインデントはしない。
名前空間.
namespace hoge
{

class Hoge()
{
    // 略
}

}
  • if、for、while、switch文の条件式を囲む ( の前に空白を入れる。
条件式.
for (int ii = 0; ii < 10; ii++)
{
    // 略
}
  • 制御構文、クラス宣言、関数宣言等の中括弧の先頭は改行する。
  • 制御構文の中身が一行の場合でも中括弧で囲む。
  • 制御構文が一行の場合、可能な限り三項演算子を使用する。
制御構文.
if (hoge == hoge)
{
    return 0;
}
  • コンマの後に空白を入れる。
  • クラス定義ではメンバ変数を先に定義し、メンバ関数を後に定義する。
  • public、private宣言の際のインデントは行わない。
クラス.
class Hoge
{
public:
    int x;
    int y;

    Hoge(int x, int y, int z_);
private:
    int z_;
}

命名規則1

命名規則は下記の通り

  • ファイル:lower_snake_case
  • 変数 :lowerCamelCase
  • 関数 :lowerCamelCase
  • クラス :UpperCamelCase
  • 定数 :UPPER_SNAKE_CASE
  • define :UPPER_SNAKE_CASE

命名規則2

  • private変数は語尾にアンダーバー(_)をつける。
  • 関数名は"動詞+名詞"とする(例:calcDistance)。
  • 変数名の省略は元の語が類推できるものに限る(例:calc, num, var)。

ヘッダインクルード順序

ヘッダのインクルードの順番は下記の通り。

  1. 自作ヘッダ
  2. サードパーティヘッダ
  3. 標準ライブラリヘッダ

コメント

コメントはDoxygenの書き方に従う。コメント記述箇所は下記の通り。

  • ファイル :ファイル名、ファイル説明、コピーライト
  • クラス :クラス名、クラス説明
  • 関数 :関数名、メソッド説明、入出力、戻り値
  • メンバ変数:変数説明
  • 列挙体 :列挙体名、列挙体説明
  • define :define値説明
  • 上記以外 :適宜、普段のコメントの書き方で記述

ファイル

/**
 * @file hoge.cpp
 * @brief Hogeクラスを実装する。
 *
 * @copyright 西森無理
 */

クラス

/**
 * @class Hoge
 * @brief Hogeクラス
 */
class Hoge{}

関数

/**
 * @brief 処理説明。
 * @param[in] huga 変数説明
 * @param[out] hego 変数説明
 * @return 戻り値説明
 */
double Hoge::hoge(int huga, char* hego)
{
}

メンバ変数

int hoge; /**< 変数説明 */

列挙体

/**
 * @enum Enum
 * @brief 何らかの列挙体
 */
enum Enum
{
    Item1, /**< アイテム説明 */
    Item2, /**< アイテム説明 */
}

define

#define HOGE huga /**< define説明 */

設計方針

  • 可能な限りconstを使用する。
    • 例:インスタンスを引数とし値渡しする際にはconst参照とする。
    • 例:メンバ変数を変更しない際にはconstで制限をかける。
  • 例外は使用せず、エラーコードを返す。
  • 定数はconstにより定義を行い、defineは使用しない。

参考

終わり

あまり固めすぎても嫌なので、非常に軽めです。
「ここはこうすべきだ!」とか、「この部分欠けてるけどどうするの?」とかあったら
ぜひご教授ください。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away