diff options
Diffstat (limited to 'chicken-wranglers/doc/standard/coding-standards.txt')
-rw-r--r-- | chicken-wranglers/doc/standard/coding-standards.txt | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/chicken-wranglers/doc/standard/coding-standards.txt b/chicken-wranglers/doc/standard/coding-standards.txt new file mode 100644 index 0000000..95f42bd --- /dev/null +++ b/chicken-wranglers/doc/standard/coding-standards.txt @@ -0,0 +1,209 @@ +http://developer.qt.nokia.com/wiki/Qt_Coding_Style +http://techbase.kde.org/Policies/Kdelibs_Coding_Style + +Qt Coding Style + +This is an overview of the coding conventions we use when writing Qt code. +The data has been gathered by mining the Qt sources, discussion forums, email threads and through collaboration of the developers. + +Indentation +============ +4 spaces are used for indentation +Spaces, not tabs! + +Declaring variables +=================== +Declare each variable on a separate line +Avoid short (e.g. “a”, “rbarr”, “nughdeget”) names whenever possible +Single character variable names are only okay for counters and temporaries, where the purpose of the variable is obvious +Wait when declaring a variable until it is needed +// Wrong +int a, b; +char *c, *d; + +// Correct +int height; +int width; +char *nameOfThis; +char *nameOfThat; + +Variables and functions start with a lower-case letter. Each consecutive word in a variable’s name starts with an upper-case letter +Avoid abbreviations +// Wrong +short Cntr; +char ITEM_DELIM = '\t'; + +// Correct +short counter; +char itemDelimiter = '\t'; +Classes always start with an upper-case letter. Public classes start with a ‘Q’ (QRgb). Public functions most often start with a ‘q’ (qRgb). + +Whitespace +=============== +Use blank lines to group statements together where suited +Always use only one blank line +Always use a single space after a keyword and before a curly brace. +// Wrong +if(foo){ +} + +// Correct +if (foo) { +} + +For pointers or references, always use a single space between the type and ‘*’ or ‘&’, but no space between the ‘*’ or ‘&’ and the variable name. +char *x; +const QString &myString; +const char * const y = "hello"; +Surround binary operators with spaces. +No space after a cast. +Avoid C-style casts when possible. +// Wrong +char* blockOfMemory = (char* ) malloc(data.size()); + +// Correct +char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size())); + +Braces +========== +As a base rule, the left curly brace goes on the same line as the start of the statement: +// Wrong +if (codec) +{ +} + +// Correct +if (codec) { +} +Exception: Function implementations and class declarations always have the left brace on the start of a line: +static void foo(int g) +{ + qDebug("foo: %i", g); +} + +class Moo +{ +}; +Use curly braces when the body of a conditional statement contains more than one line, and also if a single line statement is somewhat complex. +// Wrong +if (address.isEmpty()) { + return false; +} + +for (int i = 0; i < 10; ++i) { + qDebug("%i", i); +} + +// Correct +if (address.isEmpty()) + return false; + +for (int i = 0; i < 10; ++i) + qDebug("%i", i); +Exception 1: Use braces also if the parent statement covers several lines / wraps +// Correct +if (address.isEmpty() || !isValid() + || !codec) { + return false; +} +Exception 2: Use braces also in if-then-else blocks where either the if-code or the else-code covers several lines +// 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 + ... +} +Use curly braces when the body of a conditional statement is empty +// Wrong +while (a); + +// Correct +while (a) {} +Parentheses + +Use parentheses to group expressions: +// Wrong +if (a && b || c) + +// Correct +if ((a && b) || c) + +// Wrong +a + b & c + +// Correct +(a + b) & c + +Switch statements +==================== +The case labels are in the same column as the switch +Every case must have a break (or return) statement at the end or a comment to indicate that there’s intentionally no break +switch (myEnum) { +case Value1: + doSomething(); + break; +case Value2: + doSomethingElse(); + // fall through +default: + defaultHandling(); + break; +} + +Line breaks +=============== +Keep lines shorter than 100 characters; insert breaks if necessary. +Commas go at the end of a broken line; operators start at the beginning of the new line. An operator at the end of the line is easy to not see if your editor is too narrow. +// Correct +if (longExpression + + otherLongExpression + + otherOtherLongExpression) { +} + +// Wrong +if (longExpression + + otherLongExpression + + otherOtherLongExpression) { +} + +Inheritance and the `virtual` keyword +======================================== +When reimplementing a virtual method, do not put the `virtual` keyword in the header file. + +Line breaks +============ +Try to keep lines shorter than 100 characters, inserting line breaks as necessary. + +Qt Includes +============ +If you add #includes for Qt classes, use both the module and class name. This allows library code to be used by applications without excessive compiler include paths. +Example: +// wrong +#include <QString> + +// correct + |