Difference between revisions of "Code Formatting Conventions"

Jump to navigation Jump to search
m
Text replacement - "<source lang=" to "<syntaxhighlight lang="
(Update convention for empty loops as discussed on -devel)
m (Text replacement - "<source lang=" to "<syntaxhighlight lang=")
(One intermediate revision by the same user 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:


<source lang="cpp">
<syntaxhighlight lang="cpp">
for (int i = 0; i < t; i++) {
for (int i = 0; i < t; i++) {
     [...]
     [...]
Line 27: Line 27:
     [...]
     [...]
};
};
</source>
</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'''


<source lang="cpp">
<syntaxhighlight lang="cpp">
a = (b + c) * d;
a = (b + c) * d;
</source>
</syntaxhighlight>


'''C++ reserved words separated from opening parentheses by a white space'''
'''C++ reserved words separated from opening parentheses by a white space'''


<source lang="cpp">
<syntaxhighlight lang="cpp">
while (true) {
while (true) {
</source>
</syntaxhighlight>


'''Commas followed by a white space'''
'''Commas followed by a white space'''


<source lang="cpp">
<syntaxhighlight lang="cpp">
someFunction(a, b, c);
someFunction(a, b, c);
</source>
</syntaxhighlight>
<source lang="cpp">
<syntaxhighlight lang="cpp">
int d, e;
int d, e;
</source>
</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'''


<source lang="cpp">
<syntaxhighlight lang="cpp">
for (int a = 0; b < c; d++)
for (int a = 0; b < c; d++)
</source>
</syntaxhighlight>
<source lang="cpp">
<syntaxhighlight lang="cpp">
doSomething(e); doSomething(f); // This is probably bad style anyway
doSomething(e); doSomething(f); // This is probably bad style anyway
</source>
</syntaxhighlight>


'''Mandatory ''{}'' for empty ''for''/''while'' loops'''
'''Mandatory ''{}'' for empty ''for''/''while'' loops'''


<source lang="cpp">
<syntaxhighlight lang="cpp">
while (i < length - 1 && array[++i] != item);  // bad
while (i < length - 1 && array[++i] != item);  // bad
while (i < length - 1 && array[++i] != item) {} // good
while (i < length - 1 && array[++i] != item) {} // good
</source>
</syntaxhighlight>


'''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'''


<source lang="cpp">
<syntaxhighlight lang="cpp">
class BusWheel : public RubberInflatable {
class BusWheel : public RubberInflatable {
</source>
</syntaxhighlight>
<source lang="cpp">
<syntaxhighlight lang="cpp">
(isNight) ? colorMeDark() : colorMeBright();
(isNight) ? colorMeDark() : colorMeBright();
</source>
</syntaxhighlight>


'''Indentation level is not increased after namespace clause'''
'''Indentation level is not increased after namespace clause'''


<source lang="cpp">
<syntaxhighlight lang="cpp">
namespace Scumm {
namespace Scumm {


Line 95: Line 95:


} // End of namespace Scumm
} // End of namespace Scumm
</source>
</syntaxhighlight>


'''Array delete operator has no whitespace before []'''
'''Array delete operator has no whitespace before []'''
<source lang="cpp">
<syntaxhighlight lang="cpp">
delete[] foo;
delete[] foo;
</source>
</syntaxhighlight>


'''Template definitions'''
'''Template definitions'''


No whitespace between template keyword and <
No whitespace between template keyword and <
<source lang="cpp">
<syntaxhighlight lang="cpp">
template<typename foo>
template<typename foo>
void myFunc(foo arg) {
void myFunc(foo arg) {
     // ...
     // ...
}
}
</source>
</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.
<source lang="cpp">
<syntaxhighlight lang="cpp">
struct Foo {
struct Foo {
     void operator()() {
     void operator()() {
Line 125: Line 125:
     }
     }
};
};
</source>
</syntaxhighlight>


'''Pointers and casts'''
'''Pointers and casts'''


No whitespace after a cast; and in a pointer, we write a whitespace before the star but not after it.
No whitespace after a cast; and in a pointer, we write a whitespace before the star but not after it.
<source lang="cpp">
<syntaxhighlight lang="cpp">
const char *ptr = (const char *)foobar;
const char *ptr = (const char *)foobar;
</source>
</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.
<source lang="cpp">
<syntaxhighlight lang="cpp">
int i = 0;
int i = 0;
int &ref = i;
int &ref = i;
</source>
</syntaxhighlight>


'''Vertical alignment'''
'''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.
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.
<source lang="cpp">
<syntaxhighlight lang="cpp">
int foo    = 2;
int foo    = 2;
int morefoo = 3;
int morefoo = 3;
Line 153: Line 153:
                                   x + w,
                                   x + w,
                                   y + h);
                                   y + h);
</source>
</syntaxhighlight>


== Switch/Case constructs ==
== Switch/Case constructs ==


<source lang="cpp">
<syntaxhighlight lang="cpp">
switch (cmd) {
switch (cmd) {
case kSomeCmd:
case kSomeCmd:
Line 175: Line 175:
     Dialog::handleCommand(sender, cmd, data);
     Dialog::handleCommand(sender, cmd, data);
}
}
</source>
</syntaxhighlight>
* 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.
* 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.


Line 193: Line 193:
Camel case starting with upper case.
Camel case starting with upper case.


<source lang="cpp">
<syntaxhighlight lang="cpp">
class MyClass { /* ... */ };
class MyClass { /* ... */ };
struct MyStruct { /* ... */ };
struct MyStruct { /* ... */ };
typedef int MyInt;
typedef int MyInt;
</source>
</syntaxhighlight>


'''Class member variables'''
'''Class member variables'''
Line 203: 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.


<source lang="cpp">
<syntaxhighlight lang="cpp">
char *_someVariableName;
char *_someVariableName;
</source>
</syntaxhighlight>


'''Class methods'''
'''Class methods'''
Line 211: Line 211:
Camel case, starting with lowercase.
Camel case, starting with lowercase.


<source lang="cpp">
<syntaxhighlight lang="cpp">
void thisIsMyFancyMethod();
void thisIsMyFancyMethod();
</source>
</syntaxhighlight>


'''Local variables'''
'''Local variables'''
Line 219: Line 219:
Use camel case (Yo! no underscore separators), starting with lowercase.
Use camel case (Yo! no underscore separators), starting with lowercase.


<source lang="cpp">
<syntaxhighlight lang="cpp">
char *someVariableName;
char *someVariableName;
</source>
</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 229: 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


<source lang="cpp">
<syntaxhighlight lang="cpp">
int g_someGlobalVariable;
int g_someGlobalVariable;
</source>
</syntaxhighlight>


== Special comments ==
== Special comments ==
Line 250: 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:


<source lang="cpp">
<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 258: Line 258:
  */
  */
virtual void warpMouse(int x, int y) = 0;
virtual void warpMouse(int x, int y) = 0;
</source>
</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 264: 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:
<source lang="cpp">
<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
</source>
</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.)


TrustedUser
2,147

edits

Navigation menu