c++コード仕様

4605 ワード

説明
本稿の目的は,コードの書き込みを規範化し,コードの可読性を向上させることである.ドキュメントには、「提案」、「提唱」、「提唱しない」の文字のほか、すべて強制的な要求があります.
一般的に、c++プログラマーはgoogleプログラミングスタイルガイドを読んで参考にすることをお勧めします.これはより詳細な規範ですが、少し複雑で、本規範は簡略化されています.
言語
  • ヘッダファイルすべてのヘッダファイルを保護するには、#defineを使用してヘッダファイルが複数含まれることを防止し、名前付きフォーマットは__H_
  • #ifndef FRPL_CORE_TIME_H_
    #define FRPL_CORE_TIME_H_
    ...
    #endif // FRPL_CORE_TIME_H_
    
  • マクロ定義マクロ定義はできるだけマクロ定義を使用せず、
  • の代わりにインライン関数、const、列挙を使用する.
    const int NUM_COUNT;
    
  • 関数パラメータ定義関数の場合、パラメータの順序は、入力パラメータが前で、出力パラメータが後である.新しく追加された入力パラメータも、出力パラメータの前の
  • に配置する.
  • ネーミングスペースネーミングスペースは小文字で、長さはできるだけ短く、略語コードライブラリのネーミングスペースfrplを使用することができ、他のプロジェクトコードのネーミングスペースは「プロジェクト名」であり、usingの使用を提唱しない(ネーミングスペースを汚染しない、コンパイル実行速度を高める)、例えば
  • using namespace std;
    string aa;
    

    使用する
    std::string aa;
    

    書式設定
  • "{"を使用して新しい行を開始します.関数全体に1行しかない場合は考慮しません.
  • スペースvsタブはタブの代わりにスペースを使用し、毎回4つのスペースをインデントします.tabを使用する符号化習慣を維持するために、タブをスペースで置換(tabを使用するたびにIDEが自動的に4つのスペースに変わる)
  • をIDEに設定することができます.
    VS 2010設定方法:Tools->Options->Text Editor、C/C+->Tabs、Insert spaces、Tab size:4 Sublime 2設定方法:プリファレンス->設定デフォルト->tab_sizeに変更:4、translate_tabs_to_spaces:true
  • オペレータを比較し、オペレータ「=」、「+=」、算術オペレータ「+」、「%」、論理オペレータ「&」、「&」、「&」、ビットドメインオペレータ「<
  • a += b;
    k = x + y;
    
  • 単一オペレータ("!")、「~」、「++」、「--」、「&」)、関数パラメータのデフォルト値「=」の前後にスペースがない
  • カンマ、セミコロンは後にスペース
  • のみを追加
    void fun(int a, int b);
    
  • 1行の文が長すぎる場合、拡張演算子の前後のスペースは
  • を省略できます.
    a*b + c*d
    

    名前を付ける
  • 共通命名規則は有意義な単語または略語を用いて命名しなければならない.いくつかの共通の単語略語(msgなど)を用いることができるが、英語の単語の上位3~4文字を略語とすることを提唱しない.命名規則:大きさのアルパカ式命名法を主とし、小文字と下線を補助
  • とする.
    アルパカ法:最初の単語は小文字で始まり、2番目の単語の頭文字は大文字です.例:firstName、lastName.アルパカ法:各単語の頭文字には大文字が使用されます.たとえば、FirstName、LastName、CamelCaseなどです.
  • ファイル、ディレクトリ:小文字と下線
  • url_table.h
    
  • タイプ(クラス、構造体、列挙):アルパカ法、下線なし
  • class VideoAcqAVI ...
    struct DetectMsg ...
    
  • 変数:小文字に下線、全小文字、アルパカ法はいずれも可能で、同じファイルで一致を保つには
  • std::string table_name;
    std::string tablename;
    std::string tableName;
    

    定数は名前の前にkを付けることを提案し、グローバル変数は名前の前にgを加えることを提案する.
    const int kUseLimit = 9;
    int gCashBalance;
    
  • 関数グローバル関数、クラス内一般関数:アルパカ法、下線なし
  • bool DetectVehicle()
    

    クラス内get/set/inline関数:小文字++変数名
    void set_table_name()
    void set_tableName()
    
    class VideoAcqAVI()
    {
    public:
        bool Init();
        void set_tableName();
    private:
        std::string tableName;
    }
    
  • 列挙値、マクロ命名:全大文字+下線(マクロは推奨されません)
  • MY_EXCITING_ENUM_VALUE
    
  • 接頭辞(タイプ名、グローバル関数、リンクライブラリ)ネーミングスペースのグローバル役割ドメインに露出するタイプ名、グローバル関数はいずれもFrで始まる(すなわちクラス内関数はこの範疇に属さない)動的、静的リンクライブラリはいずれもFrで始まる内部使用に明確に用いられるタイプ、関数数、ライブラリはFriで始まる
  • を用いることができる.
    コメント
  • doxygen注釈スタイル
  • ファイルヘッダ注釈
  • /**
     *Copyright (c),2013, Freative
     *
     *@brief             
     *@author      
     *@version   
     *@date       
     *
     */
    
  • クラス、関数、変数注釈
  • /**
     * @class    
     * @brief       
     * @author        
     * @note         
     */
    
  • 関数注記
  • /**
     * @brief xx  
     * @param[in] a      
     * @param[in] b     
     * @param[in] c     
     * @param[out] buf     
     * @return 0:      。
     * @return 1:      ,  xxx
     */
    
  • クラスメンバー関数、メンバー変数注釈
  • /**        */ 
    int  m_Var;
    int  m_color;     /**<      */ 
    
  • 列挙タイプ注釈
  • /**  @brief          */ 
    enum  AnotherEnum         
     {             
        V1,  /**<      */            
        V2   /**<     */          
    }; 
    
  • コード注釈は、実装コードにおいて巧みで、難解で、興味深い、重要な点について注釈
  • を加える.
  • TODO,HACK,FIXMMコメントなどのコメントは、後で変更を検索するためにコードにタグを残すために使用されます.検索を容易にするために、以下のフォーマットを採用します.TODO/HACK/FIXME(氏名または連絡先):注釈内容
  • コメントID
    機能
    TODO
    まだやっていない余分な仕事があります(バグはありません)
    HACK
    醜いやり方で問題を解決した
    FIXME
    問題がまだ解決していない
    できるだけFIXMEではなくfixでこの問題を落とすべきです.時間不足で解決方法が不細工な場合は、HACKでマークしてください
    // TODO([email protected]):xxx
    // HACK(tom):xxx
    // FIXME(jerry):xxx
    

    Windowsプロパティ
  • VSを使用してコンパイルする場合、警告レベルを3レベル以上に設定し、すべてのwarningsをerrors処理
  • とする.
  • 多くのコードはstdafxを含む.h、コード共有を容易にするために、このヘッダファイルを明示的に含めることを推奨せず、コンパイラオプションFIを有効にして
  • を自動的に含むようにする.
    コードライブラリとプロジェクト開発
  • コードライブラリ(FRPL)は、プロジェクトを限定するための追加の仕様を追加します.
  • 他の項目においても、追加の仕様を補足することができ、かつ、プロジェクトグループのコード整合性を保証するために、本仕様とは異なる約定を有することができる.これらの補足と変更は、プロジェクトドキュメントに明記する必要があります.
  • 歴史的遺留項目については、元のコードスタイルを変更しない