> On Apr 26, 2016, at 8:28 AM, Christopher Collins <[email protected]> wrote:
>
> On Sun, Apr 24, 2016 at 10:08:09AM -0700, Sterling Hughes wrote:
>> Hi,
>>
>> As we start to bring on new contributors, and operate as a project, its
>> increasingly important that we document and agree upon coding standards.
>> I think we've done a good job of maintaining this consistency
>> informally, but, now we need to vote and agree on project standards.
>>
>> I've taken a first stab at this and committed it to the develop branch,
>> folks can see it here:
>>
>> https://github.com/apache/incubator-mynewt-core/blob/develop/CODING_STANDARDS.md
>
> Thanks for putting this together Sterling. I think it looks great. My
> opinion is that a coding standards document should not be overly
> prescriptive. Everyone has his own set of coding pet peeves; I suggest
> we try to keep those out of this document and keep it as short as
> possible. Otherwise, people won't adhere to the document, or they will
> just hate writing code and they won't contribute as much.
>
> For me, the important rules are:
> * Maximum line length
> * Brace placement
> * Typedefs
> * All-caps macros
> * Compiler extensions (e.g., packed structs).
>
> The first three are already captured; I think the others should be
> addressed. I think macros should always be in all-caps for reasons that
> everyone is probably familiar with. Unfortunately, I don't have a good
> rule for when extensions are acceptable.
>
> I would also like to see a note about when it is OK to stray from the
> conventions. There will be times (rarely) when adhering to the
> standards document just doesn't make sense. "Zero-tolerance" rules
> always seem to pave the road to hell :).
+1. Even though I have preferences they are simply preferences. Specifying as
little as possible that must be seems like a good idea.
>
> Finally, there is one point in particular that I wanted to address:
> include guards in header files. From the document:
>
> * ```#ifdef``` aliasing, shall be in the following format, where
> the package name is "os" and the file name is "callout.h":
>
> ```no-highlight
> #ifndef _OS_CALLOUT_H
> #define _OS_CALLOUT_H
>
> I am not sure I like this rule for the following two reasons:
> * A lot of the code base doesn't follow this particular naming
> convention.
> * Identifiers starting with underscore and capital letter are
> reserved to the implementation, so technically this opens the door
> to undefined behavior.
>
> A leading capital E is also reserved by POSIX (e.g., EINVAL). The
> naming convention I use is:
>
> H_CALLOUT_
>
> I would not consider this something to worry about, and I don't think we
> need to include a specific naming convention in the document. However,
> insofar as we prescribe a naming convention, it should be one which
> avoids undefined behavior.
>
> Thanks,
> Chris