MISRA Discussion Forums

Full Version: Rule 17.5 and arrays of size 1
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

Please consider the following case:

extern void f(int32_t x[1]);
int32_t glob;
extern void test(void);
void test(void)
    f(&glob); /* Allowed under MISRA C 2012 R17.5? */

Could you confirm if the intent that this should be a violation of the rule since we are passing a non-array as an argument where an array is expected? I ask only because there is related wording in the C90/99 standard under additive operators that states:

Quote:For the purposes of these operators, a pointer to a nonarray object behaves the same as a
pointer to the first element of an array of length one with the type of the object as its element

Thank you for your help.

Best Regards,

Your example is not a violation of rule 17.5. The Amplification states that the argument
Quote:... should point into an object that has at least as many elements as the array.
As you quoted, the C standard states that "&glob" should behave as if it were a pointer to the first element of an array of length one. The expected size in "f" is one, and so the example is compliant.