TrustedUser
2,147
edits
(Added emacs setting) |
m (Text replacement - "<source lang=" to "<syntaxhighlight lang=") |
||
(8 intermediate revisions by 5 users not shown) | |||
Line 11: | Line 11: | ||
Braces in your code should look like the following example: | Braces in your code should look like the following example: | ||
< | <syntaxhighlight lang="cpp"> | ||
for (int i = 0; i < t; i++) { | for (int i = 0; i < t; i++) { | ||
[...] | [...] | ||
Line 27: | Line 27: | ||
[...] | [...] | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
Did you see the {}'s on that? | Did you see the {}'s on that? | ||
Line 39: | Line 39: | ||
'''Conventional operators surrounded by a space character''' | '''Conventional operators surrounded by a space character''' | ||
< | <syntaxhighlight lang="cpp"> | ||
a = (b + c) * d; | a = (b + c) * d; | ||
</ | </syntaxhighlight> | ||
'''C++ reserved words separated from opening parentheses by a white space''' | '''C++ reserved words separated from opening parentheses by a white space''' | ||
< | <syntaxhighlight lang="cpp"> | ||
while (true) { | while (true) { | ||
</ | </syntaxhighlight> | ||
'''Commas followed by a white space''' | '''Commas followed by a white space''' | ||
< | <syntaxhighlight lang="cpp"> | ||
someFunction(a, b, c); | someFunction(a, b, c); | ||
</ | </syntaxhighlight> | ||
< | <syntaxhighlight lang="cpp"> | ||
int d, e; | int d, e; | ||
</ | </syntaxhighlight> | ||
'''Semicolons followed by a space character, if there is more on a line''' | '''Semicolons followed by a space character, if there is more on a line''' | ||
< | <syntaxhighlight lang="cpp"> | ||
for (int a = 0; b < c; d++) | for (int a = 0; b < c; d++) | ||
</ | </syntaxhighlight> | ||
< | <syntaxhighlight lang="cpp"> | ||
doSomething(e); doSomething(f); // This is probably bad style anyway | doSomething(e); doSomething(f); // This is probably bad style anyway | ||
</ | </syntaxhighlight> | ||
''' | '''Mandatory ''{}'' for empty ''for''/''while'' loops''' | ||
<syntaxhighlight lang="cpp"> | |||
< | while (i < length - 1 && array[++i] != item); // bad | ||
while (i < length - 1 && array[++i] != item) ; // | while (i < length - 1 && array[++i] != item) {} // good | ||
</syntaxhighlight> | |||
while (i < length - 1 && array[++i] != item) | |||
</ | |||
'''When declaring class inheritance and in a ? construct, colons should be surrounded by white space''' | '''When declaring class inheritance and in a ? construct, colons should be surrounded by white space''' | ||
< | <syntaxhighlight lang="cpp"> | ||
class BusWheel : public RubberInflatable { | class BusWheel : public RubberInflatable { | ||
</ | </syntaxhighlight> | ||
< | <syntaxhighlight lang="cpp"> | ||
(isNight) ? colorMeDark() : colorMeBright(); | (isNight) ? colorMeDark() : colorMeBright(); | ||
</ | </syntaxhighlight> | ||
'''Indentation level is not increased after namespace clause''' | '''Indentation level is not increased after namespace clause''' | ||
< | <syntaxhighlight lang="cpp"> | ||
namespace Scumm { | namespace Scumm { | ||
Line 100: | Line 95: | ||
} // End of namespace Scumm | } // End of namespace Scumm | ||
</ | </syntaxhighlight> | ||
'''Array delete operator has no whitespace before []''' | '''Array delete operator has no whitespace before []''' | ||
< | <syntaxhighlight lang="cpp"> | ||
delete[] foo; | delete[] foo; | ||
</ | </syntaxhighlight> | ||
'''Template definitions''' | '''Template definitions''' | ||
No whitespace between template keyword and < | No whitespace between template keyword and < | ||
< | <syntaxhighlight lang="cpp"> | ||
template<typename foo> | template<typename foo> | ||
void myFunc(foo arg) { | void myFunc(foo arg) { | ||
// ... | // ... | ||
} | } | ||
</ | </syntaxhighlight> | ||
'''Operator overloading''' | '''Operator overloading''' | ||
Operator keyword is NOT separated from the name, except for type conversion operators where it is required. | Operator keyword is NOT separated from the name, except for type conversion operators where it is required. | ||
< | <syntaxhighlight lang="cpp"> | ||
struct Foo { | struct Foo { | ||
void operator()() { | void operator()() { | ||
Line 130: | Line 125: | ||
} | } | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
'''Pointers and casts''' | '''Pointers and casts''' | ||
No whitespace after a cast; and in a pointer, we write a whitespace before the | No whitespace after a cast; and in a pointer, we write a whitespace before the star but not after it. | ||
< | <syntaxhighlight lang="cpp"> | ||
const char *ptr = (const char *)foobar; | const char *ptr = (const char *)foobar; | ||
</ | </syntaxhighlight> | ||
'''References''' | '''References''' | ||
We use the same rule for references as we do for pointers: use a whitespace before the "&" but not after it. | We use the same rule for references as we do for pointers: use a whitespace before the "&" but not after it. | ||
< | <syntaxhighlight lang="cpp"> | ||
int i = 0; | int i = 0; | ||
int &ref = i; | int &ref = i; | ||
</ | </syntaxhighlight> | ||
'''Vertical alignment''' | |||
When it adds to readability, a vertical alignment by means of extra tabs or spaces is allowed. However, it is not advised to have the opening and closing brackets/braces to occupy a single line. | |||
<syntaxhighlight lang="cpp"> | |||
int foo = 2; | |||
int morefoo = 3; | |||
Common::Rect *r = new Common::Rect(x, | |||
y, | |||
x + w, | |||
y + h); | |||
</syntaxhighlight> | |||
== Switch/Case constructs == | == Switch/Case constructs == | ||
< | <syntaxhighlight lang="cpp"> | ||
switch (cmd) { | switch (cmd) { | ||
case kSomeCmd: | case kSomeCmd: | ||
someCmd(); | someCmd(); | ||
// | // fall through | ||
case kSomeVerySimilarCmd: | case kSomeVerySimilarCmd: | ||
someMoreCmd(); | someMoreCmd(); | ||
Line 167: | Line 175: | ||
Dialog::handleCommand(sender, cmd, data); | Dialog::handleCommand(sender, cmd, data); | ||
} | } | ||
</ | </syntaxhighlight> | ||
* Note comment on whether fall through is intentional. | * Note comment on whether fall through is intentional. Use exactly this and not some variation both for consistency and so that the compiler will see it and suppress potential warnings. | ||
== Naming == | == Naming == | ||
Line 185: | Line 193: | ||
Camel case starting with upper case. | Camel case starting with upper case. | ||
< | <syntaxhighlight lang="cpp"> | ||
class MyClass { /* ... */ }; | class MyClass { /* ... */ }; | ||
struct MyStruct { /* ... */ }; | struct MyStruct { /* ... */ }; | ||
typedef int MyInt; | typedef int MyInt; | ||
</ | </syntaxhighlight> | ||
'''Class member variables''' | '''Class member variables''' | ||
Line 195: | Line 203: | ||
Prefixed with '_' and in camel case (Yo! no underscore separators), starting with lowercase. | Prefixed with '_' and in camel case (Yo! no underscore separators), starting with lowercase. | ||
< | <syntaxhighlight lang="cpp"> | ||
char *_someVariableName; | char *_someVariableName; | ||
</ | </syntaxhighlight> | ||
'''Class methods''' | '''Class methods''' | ||
Line 203: | Line 211: | ||
Camel case, starting with lowercase. | Camel case, starting with lowercase. | ||
< | <syntaxhighlight lang="cpp"> | ||
void thisIsMyFancyMethod(); | void thisIsMyFancyMethod(); | ||
</ | </syntaxhighlight> | ||
'''Local variables''' | '''Local variables''' | ||
Line 211: | Line 219: | ||
Use camel case (Yo! no underscore separators), starting with lowercase. | Use camel case (Yo! no underscore separators), starting with lowercase. | ||
< | <syntaxhighlight lang="cpp"> | ||
char *someVariableName; | char *someVariableName; | ||
</ | </syntaxhighlight> | ||
Note that for POD structures it is fine to use this rule too. | Note that for POD structures it is fine to use this rule too. | ||
Line 221: | Line 229: | ||
In general you should avoid global variables, but if it can't be avoided, use 'g_' as prefix, camel case, and start with lowercase | In general you should avoid global variables, but if it can't be avoided, use 'g_' as prefix, camel case, and start with lowercase | ||
< | <syntaxhighlight lang="cpp"> | ||
int g_someGlobalVariable; | int g_someGlobalVariable; | ||
</ | </syntaxhighlight> | ||
== Special comments == | == Special comments == | ||
Line 242: | Line 250: | ||
There are many ways to mark such comments, but developers are encouraged to use the JavaDoc style: | There are many ways to mark such comments, but developers are encouraged to use the JavaDoc style: | ||
< | <syntaxhighlight lang="cpp"> | ||
/** | /** | ||
* Move ("warp") the mouse cursor to the specified position in virtual | * Move ("warp") the mouse cursor to the specified position in virtual | ||
Line 250: | Line 258: | ||
*/ | */ | ||
virtual void warpMouse(int x, int y) = 0; | virtual void warpMouse(int x, int y) = 0; | ||
</ | </syntaxhighlight> | ||
(See [http://doxygen.scummvm.org/d9/df4/classOSystem.html#ecab84670def917107d6c1b5ca3b82c3 here] for the docs generated from this.) | (See [http://doxygen.scummvm.org/d9/df4/classOSystem.html#ecab84670def917107d6c1b5ca3b82c3 here] for the docs generated from this.) | ||
Line 256: | Line 264: | ||
If you want to add a brief explanation of a variable or function ''after'' its declaration, this is the correct syntax: | If you want to add a brief explanation of a variable or function ''after'' its declaration, this is the correct syntax: | ||
< | <syntaxhighlight lang="cpp"> | ||
int16 x; ///< The horizontal part of the point | int16 x; ///< The horizontal part of the point | ||
int16 y; ///< The vertical part of the point | int16 y; ///< The vertical part of the point | ||
</ | </syntaxhighlight> | ||
(See [http://doxygen.scummvm.org/d7/d66/structCommon_1_1Point.html#2d868735aeaaf391ce9b3df9232c031f here] for the docs generated from this.) | (See [http://doxygen.scummvm.org/d7/d66/structCommon_1_1Point.html#2d868735aeaaf391ce9b3df9232c031f here] for the docs generated from this.) | ||
Line 270: | Line 278: | ||
<pre> | <pre> | ||
indent=tab=4 | indent=tab=4 | ||
style=attach | |||
pad-oper | pad-oper | ||
pad-header | pad-header |