MISRA Discussion Forums

Full Version: Rule 8.8 clarification
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Just wanted to clarify the rule, i understand this is non-compliance:
==========================================================
static void xyz();
void xyz() /*Non_compliant */
{
...........
}
==========================================================

But the i have query regarding the following:
==========================================================
void xyz();
static void xyz() /* Is this non-compliance*/
{
...............
}
==========================================================
So in the above case where first the function is declared as extern(by default), would it be non complaint under this rule to define it static?
Code:
static void xyz();
void xyz() { .. }
In the first line "xyz" is declared with internal linkage in. In the second line the declaration of "xyz" takes the same linkage as the prior declaration which in this case is internal linkage. [See C99: Section 6.2.2 paras 4 and 5 ]
Both declarations therefore have internal linkage. This is well-defined in C, but violates rule 8.8.

Code:
void xyz();
static void xyz() { .. }
In the first line "xyz" is declared with external linkage, whereas in the second line "xyz" is declared with internal linkage. This is undefined behaviour [ C90: Undef 8, C99: Undef 7 ] and is a violation of rule 1.3