annotate STYLE_CPP.md @ 142:473e1eb96363

Client: add simple splashscreen_state, #712
author David Demelier <markand@malikania.fr>
date Thu, 28 Sep 2017 12:36:15 +0200
parents 835c8ee3f9e5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
118
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 Malikania Engine C++ CODING STYLE
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 =================================
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
3
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 Style
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 -----
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
6
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 - Always use 4 spaces as indentation,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 - Use UTF-8 charset,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 - Use Unix line endings,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 - Do not exceed 120 characters for lines of code,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 - Do not exceed 80 characters for comments,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 - Never write two blank consecutives blank lines,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 - Do not use bad words.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
14
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 ### Braces
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
16
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 Braces follow the K&R style, they are never placed on their own lines except for
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 function definitions.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
19
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 Do not put braces for single line statements except for clarity.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 if (condition) {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 apply();
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 add();
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 } else
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 ok();
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
27
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 if (condition)
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 validate();
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 if (foo) {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 state = long + conditional + that + requires + several + lines +
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 to + complete;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 }
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 Functions require braces on their own lines.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 void function()
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 }
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 And a lambda has its braces on the same lines too:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 sort([&] (auto&) {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 return true;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 });
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 ### Spaces
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 Each reserved keyword (e.g. `if`, `for`, `while`) requires a single space before
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 its argument.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 Normal function calls do not require it.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 if (foo)
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 destroy(sizeof (int));
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 ### References and pointers
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 References and pointers are always next to the type name and not the variable.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 T& get(const std::string& name);
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 int* p = &x;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
65
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 ### Naming
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
67
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 - English names,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 - Member variables have trailing underscore (e.g foo\_bar\_),
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 - No hungarian notation.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 Everything is in `underscore_case` except template parameters and macros.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 #if defined(FOO)
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 # include <foo.hpp>
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 #endif
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
77
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 namespace baz {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 class object {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 private:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 std::string name_;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
83
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 public:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 inline const std::string& name() const noexcept
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 return name_;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 }
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 };
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
90
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 template <typename Archive>
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 void open(const Archive& ar)
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 bool is_valid = false;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 }
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 } // !baz
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
98
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 ### Header guards
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 Do not use `#pragma once`.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
102
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 Header guards are usually named **PROJECT_COMPONENT_FILENAME_HPP**.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
104
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 #ifndef FOO_COMMON_UTIL_HPP
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 #define FOO_COMMON_UTIL_HPP
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
107
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 #endif // !FOO_COMMON_UTIL_HPP
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
109
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 ### Enums
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
111
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 Enumerations constants are always defined in separate line to allow commenting
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 them as doxygen.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
114
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 Enum class are encouraged.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
116
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 enum class color {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 blue,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 red,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 green
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 };
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
122
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 ### Files
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
124
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 - Use `.cpp` and `.hpp` as file extensions,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 - Filenames are all lowercase.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
127
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 ### Comments
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
129
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 Avoid useless comments in source files. Comment complex things or why it is done
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 like this. However any public function in the .hpp **must** be documented as
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 doxygen without exception.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
133
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 /*
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 * Multi line comments look like
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 * this.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 */
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
138
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 // Short comment
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
140
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 Use `#if 0` to comment blocks of code.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
142
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 #if 0
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 broken_stuff();
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 #endif
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
146
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 ### Includes
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
148
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 The includes should always come in the following order.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
150
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 1. C++ headers
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 2. C header
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 3. Third party libraries
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 4. Application headers in ""
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
155
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 #include <cstring>
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 #include <cerrno>
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
158
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 #include <sys/stat.h>
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
160
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 #include <libircclient.h>
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
162
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 #include "foo.h"
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
164
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 **Note**: always use C++ headers for C equivalent, stdio.h -> cstdio, etc.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
166
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 ### Commit messages
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
168
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 Commit messages are written using the following syntax:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
170
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 Topic: short message less than 80 characters
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
172
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 Optional additional description if needed.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
174
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 Replace `Topic` with one of the following:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
176
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 - **Client**: client library and executable,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 - **CMake**: for the build system,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 - **Common**: common library,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 - **Docs**: for the documentation,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 - **Misc**: for miscellaneous files,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 - **Server**: server library and executable,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 - **Tests**: for the unit tests.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
184
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 Programming
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 -----------
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
187
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 ### C language
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
189
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 Do not use old C stuff like `void *`, `srand/rand`, `printf` or anything that
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 can be rewritten in modern C++.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
192
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 ### RTTI
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
194
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 Usage of `dynamic_cast` and `typeid` are completely disallowed in any shape of
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 form.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
197
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 ### Arguments
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
199
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 It is recommended to pass parameters by value or const reference. Usage of
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 non-const reference as output parameter is **discouraged** and should be avoided
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 in many case because it does not allow chaining of expressions like:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
203
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 std::cout << reverse(upper(clean(" hello world! "))) << std::endl;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
205
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 If your function is designed to return a modified value passed as argument, it
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 is better to take it by value and modify it directly.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
208
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 std::string clean(std::string input)
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 if (!input.empty() && input.back() == '\r')
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 input.pop_back();
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
213
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 return input;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 }
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
216
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 Never pass primitive types as const value.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
218
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 ### Assertions
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
220
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 Use the `assert` macro from the cassert header file to verify programming
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 errors.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
223
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 For example, you may use `assert` to verify that the developer access the data
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 between the bounds of an array:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
226
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 T& operator[](unsigned index)
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 assert(index < length_);
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
230
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 return data_[index];
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 }
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
233
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 The `assert` macro is not meant to check that a function succeeded, this code
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 must not be written that way:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
236
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 assert(listen(10));
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
238
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 ### Exceptions
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
240
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 You must use exceptions to indicate an error that was unexpected such as:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
242
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 - Failing to open a file,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 - I/O unexpected errors,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 - Parsing errors,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 - User errors.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
247
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 You may use the C++ standard exceptions defined in the stdexcept header but if
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 you need to carry more data within your exception, you should derive from
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 `std::exception`.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
251
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 ### Error code
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
253
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 You should not use error codes to indicate errors, instead use exceptions.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 Error codes are allowed in Boost.Asio though.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
256
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 ### Free functions
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
258
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 Basic utility functions should be defined in a namespace as a free function not
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 as a static member function, we're doing C++ not Java.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
261
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 Example:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
263
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 namespace util {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
265
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 std::string clean(std::string input);
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
267
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 } // !util
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
269
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 ### Variables initialization
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
271
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 Use parentheses to initialize non primitive types:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
273
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 throw std::runtime_error("foo");
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
275
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 my_class obj("bar");
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
277
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 Use brace initialization when you want to use an initializer list, type
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 elision:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
280
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 std::vector<int> v{1, 2, 3};
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
282
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 foo({1, 2}); // type deduced
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
284
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 return { "true", false }; // std::pair returned
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
286
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 Use the assignment for primitive types:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
288
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 int x = 123;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
290 bool is_valid = true;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
291
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 ### Classes
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
293
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 Classes are usually defined in the following order:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
295
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 1. Public inner types (enums, classes),
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 2. Protected/private members
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 3. Public functions
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
299
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
300 class foo {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
301 public:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 enum class type {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 a,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 b
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
305 };
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
306
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
307 private:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
308 int member_{0};
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
309
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 public:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 void some_function();
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 };
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
313
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 ### Structs
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
315
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
316 Do not use C structs unless you have very good reason to do so. If you want to
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 pack some data, just use `class` and make all fields public.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
318
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
319 class point {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
320 public:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
321 int x{0};
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
322 int y{0};
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
323 };
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
324
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 ### Return
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
326
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 The preferred style is to return early in case of errors. That makes the code
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 more linear and not highly indented.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
329
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
330 This code is preferred:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
331
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
332 if (a_condition_is_not_valid)
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
333 return nullptr;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
334 if (an_other_condition)
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
335 return nullptr;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
336
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
337 auto x = std::make_shared<object>();
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
338
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
339 x->start();
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
340 x->save();
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
341
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 return x;
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
343
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
344 Additional rules:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
345
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
346 - Do never put parentheses between the returned value,
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
347 - Do not put a else branch after a return.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
348
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
349 ### Auto
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
350
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 We encorage usage of `auto`, it reduces code maintainance as you don't need to
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
352 change your code when your rename types.
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
353
136
835c8ee3f9e5 Docs: use ``` as fenced code blocks
David Demelier <markand@malikania.fr>
parents: 118
diff changeset
354 ```cpp
118
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
355 auto it = std::find_if(v.begin(), v.end(), [&] (const auto& obj) {
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
356 return obj.key() == "foo";
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
357 });
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
358
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
359 for (const auto& pair : a_map)
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
360 std::cout << pair.first << " = " << pair.second << std::endl;
136
835c8ee3f9e5 Docs: use ``` as fenced code blocks
David Demelier <markand@malikania.fr>
parents: 118
diff changeset
361 ```
118
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
362
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
363 But do not use `auto` to write code like in python, this is not acceptable:
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
364
136
835c8ee3f9e5 Docs: use ``` as fenced code blocks
David Demelier <markand@malikania.fr>
parents: 118
diff changeset
365 ```cpp
118
841e39c8aba4 Misc: add STYLE_CPP.md
David Demelier <markand@malikania.fr>
parents:
diff changeset
366 auto o = my_object("foo");
136
835c8ee3f9e5 Docs: use ``` as fenced code blocks
David Demelier <markand@malikania.fr>
parents: 118
diff changeset
367 ```