Rule 12.5 - sized and unsized array parameters

Moderators: misra-c, david ward

Post Reply
rgamble
Posts: 14
Joined: Fri Jul 20, 2007 7:54 pm

Rule 12.5 - sized and unsized array parameters

Post by rgamble » Sat Jun 11, 2016 1:23 am

Does Rule 12.5 from AMD-1 apply to unsized array parameters (those without a size between the brackets)? E.g.:

Code: Select all

void f(int32_t A[4], int32_t B[]) {
    uint32_t sizeA = sizeof(A);  // Obvious violation of 12.5
    uint32_t sizeB = sizeof(B);  // Violation of 12.5?
}
The snippets in the amplification, rationale, and examples exclusively use sized arrays and the rationale does not seem to apply as strongly to unsized array parameters but the rule does not specify that it only applies to sized arrays or to both sized and unsized arrays. Can you please clarify the intention here?

misra-c
Posts: 555
Joined: Thu Jan 05, 2006 1:11 pm

Re: Rule 12.5 - sized and unsized array parameters

Post by misra-c » Mon Jun 27, 2016 1:26 pm

Rule 12.5 applies to all function parameters declared as "array of type". Array declarators always have an "array type", regardless as to whether the size is present or not (See 6.7.5.2 of the C99 standard). The standard uses the phrases "array type" and "array of type" interchangeably.

Therefore this rule applies to both sized and unsized types and your second example violates 12.5.
---
Posted by and on behalf of
the MISRA C Working Group

Post Reply

Return to “8.12 Expressions”