Skip to content

Commit

Permalink
CodingGuidelines: spell out post-C89 rules
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
gitster committed Jul 18, 2019
1 parent b697d92 commit cc0c429
Showing 1 changed file with 23 additions and 3 deletions.
26 changes: 23 additions & 3 deletions Documentation/CodingGuidelines
Expand Up @@ -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.

Expand Down

0 comments on commit cc0c429

Please sign in to comment.