On Sat, Apr 4, 2020 at 1:22 AM Vaibhav Gupta <vaibhav.varo...@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 and we follow it in RTEMS-libbsd. It is nicely explained in the FreeBSD style guide so I'm pasting an excerpt below: " 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@rtems.org > http://lists.rtems.org/mailman/listinfo/devel >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel