[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 14:15, Jan Beulich wrote: On 14.02.2024 12:27, Federico Serafini wrote: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).I'm afraid I don't see what violation there is in this case, to deviate. As a result I'm also not sure I correctly understand the rest of your reply. #define a(x, y) b(x, y) int a; // Violation of Rule 5.5. The macro name `a' that exist before the preprocessing phase, still exists after the preprocessing phase as identifier for the integer variable and this is a violation. 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. I correct myself: if you use `a' as identifier for a *function*, it is not a violation because after the preprocessing phase the identifier `a' no longer exists, for example: #define a(x, y) b(x, y) void a(int x, int y); // Ok. -- Federico Serafini, M.Sc. Software Engineer, BUGSENG (http://bugseng.com)
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |