MISRA Discussion Forums
Arithmetic on Pointers are MISRA compliant ? - Printable Version

+- MISRA Discussion Forums (https://forum.misra.org.uk)
+-- Forum: MISRA C (https://forum.misra.org.uk/forumdisplay.php?fid=4)
+--- Forum: MISRA-C: 2004 rules (https://forum.misra.org.uk/forumdisplay.php?fid=17)
+---- Forum: 6.17 Pointers and Arrays (https://forum.misra.org.uk/forumdisplay.php?fid=44)
+---- Thread: Arithmetic on Pointers are MISRA compliant ? (/showthread.php?tid=74)



Arithmetic on Pointers are MISRA compliant ? - lv - 31-10-2005

The rules 17.1 to 17.3 give some possibilities to manipulate pointers (arithmetic, substraction, comparison) whereas the rule 17.4 doesn't authorize pointer manipulation in any way other than array indexing.

Should it be possible to explain me where I make a mistake in my understanding?

In particular, I would like to know if the following code is MISRA 2004 compliant concerning pointer manipulation:
Code:
    unsigned int tab[10];
    void test(void)
    {
        unsigned int *ptr;

        ptr = &tab[2];
        *ptr = 33;
        ptr++;                         /*  MISRA Compliant ? */
        *ptr = 11;
    }

I thank you in advance.

Best regards.


- Gavin McCall - 05-01-2006

ANSWER: MISRA-C Steering Team 5/1/06

Your example is not compliant with 17.4.

Tab is an array type, therefore rule 17.1 is met. Rules 17.1, 17.2 and 17.3 address undefined behaviour issues.
It is recognised that 17.4 is a more restrictive rule than 17.1. Rule 17.1 still applies when rule 17.4 is deviated.

Use either

Code:
tab[2] = 33;
tab[3] = 11;
tab[i+2] = …;

A deviation to rule 17.4 would need to be raised for direct pointer arithmetic on arrays as in your example above.