Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Rule 17.5 and arrays of size 1
#1
Hello,

Please consider the following case:

Code:
#include
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
type.

Thank you for your help.

Best Regards,

-Greg
<t></t>
Reply
#2
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.
Posted by and on behalf of the MISRA C Working Group
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)