CodingGuidelines: spell out post-C89 rules

Even though we have been sticking to C89, there are a few handy features we borrow from more recent C language in our codebase after trying them in weather balloons and saw that nobody screamed. Spell them out. While at it, extend the existing variable declaration rule a bit to read better with the newly spelled out rule for the for loop. Signed-off-by: Junio C Hamano <gitster@pobox.com>

Junio C Hamano committed Jul 16, 2019 at 10:21 UTC cc0c42975a2d9159fea5fdd053425492333c1aba
1 file changed +23 -3
Documentation/CodingGuidelines
+23 -3
@@ -195,10 +195,30 @@ For C programs:
195 by e.g. "echo DEVELOPER=1 >>config.mak".
196
197 - We try to support a wide range of C compilers to compile Git with,
198 - including old ones. That means that you should not use C99
199 - initializers, even if a lot of compilers grok it.
198 + including old ones. You should not use features from newer C
199 + standard, even if your compiler groks them.
200
201 - - Variables have to be declared at the beginning of the block.
201 + There are a few exceptions to this guideline:
202 +
203 + . since early 2012 with e1327023ea, we have been using an enum
204 + definition whose last element is followed by a comma. This, like
205 + an array initializer that ends with a trailing comma, can be used
206 + to reduce the patch noise when adding a new identifer at the end.
207 +
208 + . since mid 2017 with cbc0f81d, we have been using designated
209 + initializers for struct (e.g. "struct t v = { .val = 'a' };").
210 +
211 + . since mid 2017 with 512f41cf, we have been using designated
212 + initializers for array (e.g. "int array[10] = { [5] = 2 }").
213 +
214 + These used to be forbidden, but we have not heard any breakage
215 + report, and they are assumed to be safe.
216 +
217 + - Variables have to be declared at the beginning of the block, before
218 + the first statement (i.e. -Wdeclaration-after-statement).
219 +
220 + - Declaring a variable in the for loop "for (int i = 0; i < 10; i++)"
221 + is still not allowed in this codebase.
222
223 - NULL pointers shall be written as NULL, not as 0.
224