summaryrefslogtreecommitdiff
path: root/Documentation/CodingGuidelines
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-07-25 20:59:22 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-07-25 20:59:23 (GMT)
commitfe9dc6b08c35a8808d24ad32ddac847bc3137a4a (patch)
tree574f4c5923b215589f996a625f13c902561c9f7e /Documentation/CodingGuidelines
parent080af915a3ee4d9511dc288b29143b9958ac0adc (diff)
parentcc0c42975a2d9159fea5fdd053425492333c1aba (diff)
downloadgit-fe9dc6b08c35a8808d24ad32ddac847bc3137a4a.zip
git-fe9dc6b08c35a8808d24ad32ddac847bc3137a4a.tar.gz
git-fe9dc6b08c35a8808d24ad32ddac847bc3137a4a.tar.bz2
Merge branch 'jc/post-c89-rules-doc'
We have been trying out a few language features outside c89; the coding guidelines document did not talk about them and instead had a blanket ban against them. * jc/post-c89-rules-doc: CodingGuidelines: spell out post-C89 rules
Diffstat (limited to 'Documentation/CodingGuidelines')
-rw-r--r--Documentation/CodingGuidelines26
1 files changed, 23 insertions, 3 deletions
diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
index 1169ff6..f45db5b 100644
--- a/Documentation/CodingGuidelines
+++ b/Documentation/CodingGuidelines
@@ -195,10 +195,30 @@ For C programs:
by e.g. "echo DEVELOPER=1 >>config.mak".
- We try to support a wide range of C compilers to compile Git with,
- including old ones. That means that you should not use C99
- initializers, even if a lot of compilers grok it.
+ including old ones. You should not use features from newer C
+ standard, even if your compiler groks them.
- - Variables have to be declared at the beginning of the block.
+ There are a few exceptions to this guideline:
+
+ . since early 2012 with e1327023ea, we have been using an enum
+ definition whose last element is followed by a comma. This, like
+ an array initializer that ends with a trailing comma, can be used
+ to reduce the patch noise when adding a new identifer at the end.
+
+ . since mid 2017 with cbc0f81d, we have been using designated
+ initializers for struct (e.g. "struct t v = { .val = 'a' };").
+
+ . since mid 2017 with 512f41cf, we have been using designated
+ initializers for array (e.g. "int array[10] = { [5] = 2 }").
+
+ These used to be forbidden, but we have not heard any breakage
+ report, and they are assumed to be safe.
+
+ - Variables have to be declared at the beginning of the block, before
+ the first statement (i.e. -Wdeclaration-after-statement).
+
+ - Declaring a variable in the for loop "for (int i = 0; i < 10; i++)"
+ is still not allowed in this codebase.
- NULL pointers shall be written as NULL, not as 0.