annotate STYLE_CPP.md @ 139:b80d37e71b87

Client: rework dispatching between client and window, closes #711 The window backend is able to produce user events but they need to be dispatched into the client, the state and the window. This change makes client owner of window and dispatches events from client to the window and the future state mechanism. Remove the client network code temporarily to rework in the dispatcher later.
author David Demelier <markand@malikania.fr>
date Wed, 27 Sep 2017 20:34:59 +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 ```