[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 2/3] docs/misra/rules.rst: add rule 5.5
On 14/02/24 09:28, Jan Beulich wrote: On 13.02.2024 23:33, Stefano Stabellini wrote:Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxx> --- docs/misra/rules.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/misra/rules.rst b/docs/misra/rules.rst index c185366966..931158b354 100644 --- a/docs/misra/rules.rst +++ b/docs/misra/rules.rst @@ -181,6 +181,12 @@ maintainers if you want to suggest a change. headers (xen/include/public/) are allowed to retain longer identifiers for backward compatibility.+ * - `Rule 5.5 <https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite/-/blob/master/R_05_05.c>`_+ - Required + - Identifiers shall be distinct from macro names + - Clashes between function-like macros and non-callable entities + are allowed. The pattern #define x x is also allowed.Just for me to know what exactly is covered (hence also a question to Roberto as to [to be] implemented Eclair behavior): Even when the above would be sufficient (and imo better) people frequently write #define a(x, y) b(x, y) which, transformed to the specific case here, would then be #define a(x, y) a(x, y) I'd assume such ought to also be covered, but that's not clear from the spelling above. I list what happens in some different situations, then we can find the right words for the documentation and/or refine the configuration: If you #define x x and then use `x' as identifier, the resulting violation is deviated (allowed pattern). If you #define a(x, y) a(x, y) and then use `a' as identifier for a non-callable entity, the resulting violation is deviated (no clash with non-callable entities). If you use identifier `a' for a callable entity, the resulting violation is reported: the allowed pattern covers only macros expanding to their own name, in this case the macro name is considered to be `a' only, not a(x, y). If you #define a(x, y) b(x, y) and then use `a' as identifier for a non-callable entity, the resulting violation is deviated (no clash with non-callable entities). If you use `a' as identifier for a callable entity, this is not a violation because after the preprocessing phase, identifier `a' no longer exists. As far as I know, this is what was agreed upon in one of the recent MISRA meetings. -- Federico Serafini, M.Sc. Software Engineer, BUGSENG (http://bugseng.com)
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |