Newer
Older
This is a coding style guide for OSv. It is meant to be helpful, not a tool
for bikeshedding patches on the mailing list. The use of common sense when
applying these rules is required.
1.1 We use 4 spaces for indentation, no tabs.
1.2 switch statements, put the case with same indentation as the switch
```
switch(op) {
case 1:
i++;
break;
case 2:
case 3:
break;
default:
break;
```
1.3 Avoid multiple statements on the same line:
```
i++; j++;
```
1.4 Line length should not exceed 80 characters.
## 2. Spaces
2.1 Use spaces around binary and ternary operators.
```
a = a + 3;
if (a == 1 || b < 2)
a += 1;
a = 1 + 2 * 3;
a = b < 1 ? b : 1;
```
2.2 Do not use spaces around unary operators.
```
a = -2;
s = *p;
for (int i = 3; i < 10; ++i)
```
2.3 Do not use spaces between a function and its parameters, or a
template and its paramters.
```
sqrt(2.0)
std::vector<object*>
```
2.4 Bind '*' or '&' to the type, not the variable
...
int* a;
int& b;
...
Please note that the rule obviously does not make sense when multiple variables
are declared on the same line. In such cases, it is preferable to do:
...
int *a, *b;
...
## 3. Braces
3.1 Always use curly braces for if statement, even if it is a one line if.
3.2 When a brace-delimited block is part of a statement (e.g., if, for,
switch, WITH_LOCK, etc.), separate the open brace from the statement
with a single space - not with a newline.
```
if (a == 3) {
....
}
````
3.2 In inline method, you can use the open braces at the same line of the method.
```
int get_age() {
return age;
}
```
3.3 In longer method, the opening brace should be at the beginning of the line.
```
void clear()
{
.....
}
```
## 4. Naming Convention
4.1 Use all lower snake_case names
## 5. Commenting
5.1 Use the // C++ comment style for normal comment
5.2 When documenting a namespace, class, method or function using Doxygen, use /** */ comments.
## 6. Macros, Enums and RTL
6.1 Avoid Macros when a method would do. Prefer enum and constant to macro.
6.2 Prefer "enum class" to "enum".
6.3 Macro names and enum label should be capitalized. For "enum class",
non-capitalized values are fine.
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
## 7. Functions
7.1 When declaring or defining a function taking no arguments in C++ code,
avoid the unnecessary "void" as an argument list.
This "void" was only necessary in C to maintain backward-compatibility with
pre-1989 prototype-less declarations, but was never needed in C++ code.
For example, write:
```C++
void abort() {
```
and not:
```C++
void abort(void) {
```
7.2 Put no space between function name and the argument list. For example:
```C++
double sqrt(double d) {
```
7.3 Avoid parantheses around return value
"return" is not a function - it doesn't need parantheses. For example:
```C++
return 0;
return a + b;
```