Proposal to add rule for nested CPP Directives in RTEMS coding conventions

Vaibhav Gupta vaibhav.varodek at gmail.com
Fri Apr 3 20:14:22 UTC 2020


On Sat, Apr 4, 2020, 1:41 AM Vijay Kumar Banerjee <vijay at rtems.org> wrote:

>
>
> On Sat, Apr 4, 2020 at 1:22 AM Vaibhav Gupta <vaibhav.varodek at gmail.com>
> wrote:
>
>> CPP directives like:
>> 1) #if
>> 2) #ifdef
>> 3) #ifndef
>> 4) #elif
>> 5) #else
>> 6) #endif
>>
>> do form code blocks. Since, they don't make use of brackets,
>> as a part of C language rule, their nested and repeated use
>> can make the code very hard to read. Can even result it
>> spaghetti code.
>>
>> This can be understood by this patch:
>> https://lists.rtems.org/pipermail/devel/2020-April/058964.html
>>
>> The proposed idea is:
>> 1) Nested CPP directives should follow same indentation rules
>>     as of nested conditional statements like 'if' and loops.
>>
>> 2) To mark which closing CPP directive (#endif) pairs with which
>> opening CPP directive (#if or #ifdef or #ifndef), make use of comments.
>> ex:
>> #ifdef <some-macro> /* To test/verify/enable xyz */
>>   .....
>>   ....
>> #endif /* To test/verify/enable xyz */
>>
>> There's a rule like this in the FreeBSD
>
Yes, and when I ported APIs, last year, as a part of my
Project, the ported headers follow same rule.

> and we follow it in RTEMS-libbsd.
> It is nicely explained in the FreeBSD style guide so I'm pasting an excerpt
> below:
>
Thanks!

--Vaibhav Gupta

>
> "
>     The comment for #endif should match the expression used in the corre-
>      sponding #if or #ifdef.  The comment for #else and #elif should match
> the
>      inverse of the expression(s) used in the preceding #if and/or #elif
>      statements.  In the comments, the subexpression "defined(FOO)" is
> abbre-
>      viated as "FOO".  For the purposes of comments, "#ifndef FOO" is
> treated
>      as "#if !defined(FOO)".
>
>      #ifdef KTRACE
>      #include <sys/ktrace.h>
>      #endif
>
>      #ifdef COMPAT_43
>      /* A large region here, or other conditional code. */
>      #else /* !COMPAT_43 */
>      /* Or here. */
>      #endif /* COMPAT_43 */
>
>      #ifndef COMPAT_43
>      /* Yet another large region here, or other conditional code. */
>      #else /* COMPAT_43 */
>      /* Or here. */
>      #endif /* !COMPAT_43 */
>
> "
>
> It would be nice to have a rule like this for RTEMS codes as well.
>
>
> --Vaibhav Gupta
>> _______________________________________________
>> devel mailing list
>> devel at rtems.org
>> http://lists.rtems.org/mailman/listinfo/devel
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200404/a32f8cae/attachment.html>


More information about the devel mailing list