Qtコードスタイル(dbzhang 008に回転)

4766 ワード


Qtコードスタイル
カテゴリ: C/C++ Qt
2011-05-01 12:03 
1723人が読みます 
コメント(19) 
コレクション 
告発する
  • http://developer.qt.nokia.com/wiki/Qt_Coding.スタイル
  • http://developer.qt.nokia.com/wiki/Writing_Qt_Examples
  • コードがよく見えないようでしたら、どんなルールでも破ることができます。 。
    字下げ
  • は4つのスペースを採用しています。
  • スペースです。TABを使わないでください。
  • 変数
  • 各行の変数
  • 短い変数名をできるだけ避ける
  • 単文字の変数は、一時変数またはサイクルのカウントだけで
  • を使用します。
  • 、本当に必要なときに変数を定義する
  • // Wrong
    int a, b;
    char *c, *d;
     
    // Correct
    int height;
    int width;
    char *nameOfThis;
    char *nameOfThat;
  • は小文字で始まり、後続の単語は大文字で始まる
  • 略語の使用を避ける
  • // Wrong
    short Cntr;
    char ITEM_DELIM = '/t';
     
    // Correct
    short counter;
    char itemDelimiter = '/t';
  • 類名はいつも大文字で始まる。
    追加
    Qt例の作成には、変数名に対して以下のような提案があります。
  • メンバー変数の前に「m_」や他のものを入れないでください。
  • パラメータ名とメンバー変数名が衝突した場合、「this-」を使って解決する
  • void MyClass::setColor(const QColor &color;)
    {
        this->color = color;
    }
    または
    void MyClass::setColor(const QColor &newColor;)
    {
        color = newColor;
    }
    使用を避ける (意味不明の文字):
    void MyClass::setColor(const QColor &c)
    {
        color = c;
    }
    注意:構造関数では、同じ問題が発生します。信じようが信じまいが、次の仕事はできます。
    MyClass::MyClass(const QColor &color;)
        : color(color)
    {
    }
    空白
  • 空行を利用して語句を適切にグループ化する
  • はいつも一つの空の行を使用します。
  • は、常にキーワードと大かっこの前にスペース
  • を使用する。
    // Wrong
    if(foo){
    }
     
    // Correct
    if (foo) {
    }
  • ペアのポインタと参照は、タイプと*、&の間にスペースを入れますが、*、&変数との間にはスペースを入れません。
    char *x;
    const QString &myString;
    const char * const y = "hello";
  • 元の操作子の前後に空白があります。
  • タイプの変換後、空白なし
  • Cスタイルのタイプ変換をできるだけ避ける
  • // Wrong
    char* blockOfMemory = (char* ) malloc(data.size());
     
    // Correct
    char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size()));
  • 断行以外に、空白でいくつかのものを配置しようとしないでください。
    //Wrong
    x      = rect.x();
    y      = rect.y();
    width  = rect.width();
    height = rect.height();
    大かっこ
  • 基本原則:左大かっこと文は同じ行に維持されます。
    // Wrong
    if (codec)
    {
    }
     
    // Correct
    if (codec) {
    }
  • 例外:関数定義とクラス定義において、左大かっこは常に単独で1行
  • を占める。
    class Moo
    {
    };
  • 制御文のbodyのうち、1行だけの場合、大かっこ
  • は使用されません。
    // Wrong
    if (address.isEmpty()) {
        return false;
    }
     
    // Correct
    if (address.isEmpty())
        return false;
    
    if (x) {
        // do something strange
        yyyyyyyyy = yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +
                    zzzzzzzzzzzzzzzzzzzzzz;
    }
  • 例外1:親文が複数行にまたがる場合、大かっこ
  • を使用する。
    // Correct
    if (address.isEmpty() || !isValid()
          || !codec) {
        return false;
    }
  • 例外2:if-else構造において、複数行にまたがるところがある場合、大かっこ
  • を使用する。
    // Wrong
    if (address.isEmpty())
        return false;
    else {
        qDebug("%s", qPrintable(address));
        ++it;
    }
     
    // Correct
    if (address.isEmpty()) {
        return false;
    } else {
        qDebug("%s", qPrintable(address));
        ++it;
    }
    
    // Wrong
    if (a)
        if (b)
            ...
        else
            ...
     
    // Correct
    if (a) {
        if (b)
            ...
        else
            ...
    }
  • 制御文のbodyが空の場合は、大かっこ
  • を使用する。
    // Wrong
    while (a);
     
    // Correct
    while (a) {}
    丸括弧
  • 丸括弧を使用して式をグループ化する
  • // Wrong
    if (a && b || c)
     
    // Correct
    if ((a && b) || c)
     
    // Wrong
    a + b & c
     
    // Correct
    (a + b) & c
    switch文
  • caseとswitchは同じ列
  • にあります。
  • 各caseにはbreakまたはrenturn文が必要であり、またはbreak
  • が必要でないと注釈で説明する。
    switch (myEnum) {
    case Value1:
        doSomething();
        break;
    case Value2:
        doSomethingElse();
        // fall through
    default:
        defaultHandling();
        break;
    }
    行と列
  • は一行100より短いままである。 この文字(補足部分に注意)は、必要に応じて断行されます。
  • コンマで一行を置いた後、オペレータは一行の先頭(オペレータと同じクラスの前の行が揃う)
  • に配置されます。
    // Correct
    if (longExpression
        + otherLongExpression
        + otherOtherLongExpression) {
    }
  • 例外:if文と&&&または𞓜𞓜を使用すると、配置は少し調整が必要です(そうでないと、制御文とbodyは分かりにくいです)。
    //Wrong
    if (dsfljfsfskjldsjkljklsjdk
        && fdsljsjdsdljklsjsjkdfs
        && dsfljkdfjkldksdfjdjkfdksfdkjld) {
        sadjdjddadhsad;
    }
    
    //Correct
    if (dsfljfsfskjldsjkljklsjdk
            && fdsljsjdsdljklsjsjkdfs
            && dsfljkdfjkldksdfjdjkfdksfdkjld) {
        sadjdjddadhsad;
    }
    whleまたはelse ifに対しては、この問題は存在しません。
    while (dsfljfsfskjldsjkljklsjdk
           && fdsljsjdsdljklsjsjkdfs
           && dsfljkdfjkldksdfjdjkfdksfdkjld) {
        sadjdjddadhsad;
    }
    追加
  • Qt例では、前の基準100よりも厳しいです。採用されたのは80です。
  • です。
  • Qt Quarterlyは58
  • を採用しています。
  • Qt本には68(?)
  • が採用されています。
    ヴィトンと継承
  • 虚関数を再実現する場合、ヘッダファイルにvirtualキーを置かない