Page 1 of 1

Arithmetic on Pointers are MISRA compliant ?

Posted: Mon Oct 31, 2005 4:35 pm
by lv
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: Select all

	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.

Posted: Thu Jan 05, 2006 4:48 pm
by Gavin McCall
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: Select all

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.[/b]