aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2014-07-09 18:17:23 +0200
committerPieter Wuille <pieter.wuille@gmail.com>2014-07-28 22:08:13 +0200
commit2887bffcfdc138f53c60091ab2906790971c9af5 (patch)
tree7b29f1b4f629c51522a95aa77726bff3e6ff1ac3 /doc
parentf9de17ec2f3e22fe9d96557e328af836a3590660 (diff)
downloadbitcoin-2887bffcfdc138f53c60091ab2906790971c9af5.tar.xz
Update coding style and add .clang-format
Diffstat (limited to 'doc')
-rw-r--r--doc/coding.md76
1 files changed, 31 insertions, 45 deletions
diff --git a/doc/coding.md b/doc/coding.md
index 2f332e92f0..ceed8c18b4 100644
--- a/doc/coding.md
+++ b/doc/coding.md
@@ -1,29 +1,17 @@
Coding
====================
-Please be consistent with the existing coding style.
-
-Block style:
-```c++
- bool Function(char* psz, int n)
- {
- // Comment summarising what this section of code does
- for (int i = 0; i < n; i++)
- {
- // When something fails, return early
- if (!Something())
- return false;
- ...
- }
-
- // Success return is usually at the end
- return true;
- }
-```
-- ANSI/Allman block style
-- 4 space indenting, no tabs
-- No extra spaces inside parenthesis; please don't do ( this )
-- No space after function names, one space after if, for and while
+Various coding styles have been used during the history of the codebase,
+and the result is not very consistent. However, we're now trying to converge to
+a single style, so please use it in new code. Old code will be converted
+gradually.
+- Basic rules specified in src/.clang-format. Use a recent clang-format-3.5 to format automatically.
+ - Braces on new lines for namespaces, classes, functions, methods.
+ - Braces on the same line for everything else.
+ - 4 space indentation (no tabs) for every block except namespaces.
+ - No indentation for public/protected/private or for namespaces.
+ - No extra spaces inside parenthesis; don't do ( this )
+ - No space after function names; one space after if, for and while.
- Includes need to be ordered alphabetically, separate own and foreign headers with a new-line (example key.cpp):
```c++
#include "key.h"
@@ -38,31 +26,29 @@ Block style:
class CAlpha;
class CBeta;
```
-- When using namespace keyword use the following form:
-```c++
-namespace Foo {
-...
+Block style example:
+```c++
+namespace foo
+{
+class Class
+{
+ bool Function(char* psz, int n)
+ {
+ // Comment summarising what this section of code does
+ for (int i = 0; i < n; i++) {
+ // When something fails, return early
+ if (!Something())
+ return false;
+ ...
+ }
-} // Foo
+ // Success return is usually at the end
+ return true;
+ }
+}
+}
```
-Variable names begin with the type in lowercase, like nSomeVariable.
-Please don't put the first word of the variable name in lowercase like
-someVariable.
-
-Common types:
-
- n integer number: short, unsigned short, int, unsigned int, int64, uint64, sometimes char if used as a number
- d double, float
- f flag
- hash uint256
- p pointer or array, one p for each level of indirection
- psz pointer to null terminated string
- str string object
- v vector or similar list objects
- map map or multimap
- set set or multiset
- bn CBigNum
Doxygen comments
-----------------