04-02-2008, 02:22 PM
I wonder if rule 16.4 fills a purpose, as it seems to be well-covered by several other MISRA rules.
\"16.4 The identifiers used in the declaration and definition of a function shall be identical.\"
\"8.3 For each function parameter the type given in the declaration and definition shall be identical, and the return types shall also be identical.\"
8.3 has both the parameters and the return type covered, all is fine there. Therefore I assume that rule 16.4 only applies to the function name itself. Ie it would be interpreted as \"the function identifier used in declaration and definition shall be identical\".
So as far as I understand it, rule 16.4 would only apply when the names in the function definition and the declaration are different, ie the scenario where the function definition is \"apples\" but the function declaration is \"bananas\" (although their parameters and return types are identical, as covered by rule 8.3):
The above behavior is the same if the function definition is placed in a h-file and the function is called from another file.
The \"bananas\" case will never result in faulty program behavior, assuming rule 8.3 is fulfilled. Also, this case would violate rule 8.1 \"Functions shall have a prototype...\". And if the bananas function had been placed below main() instead of above, the code wouldn't even compile.
So I fail to see the point of rule 16.4, it seems redundant to me.
\"16.4 The identifiers used in the declaration and definition of a function shall be identical.\"
\"8.3 For each function parameter the type given in the declaration and definition shall be identical, and the return types shall also be identical.\"
8.3 has both the parameters and the return type covered, all is fine there. Therefore I assume that rule 16.4 only applies to the function name itself. Ie it would be interpreted as \"the function identifier used in declaration and definition shall be identical\".
So as far as I understand it, rule 16.4 would only apply when the names in the function definition and the declaration are different, ie the scenario where the function definition is \"apples\" but the function declaration is \"bananas\" (although their parameters and return types are identical, as covered by rule 8.3):
Code:
static void apples (uint8_t n);
static void bananas (uint8_t n)
{
}
int main()
{
apples(x); /* A linker error will occur, apples() isn't found and the program won't be executed. */
bananas(x); /* This will work fine but the prototype \"apples\" is redundant. */
}
The above behavior is the same if the function definition is placed in a h-file and the function is called from another file.
The \"bananas\" case will never result in faulty program behavior, assuming rule 8.3 is fulfilled. Also, this case would violate rule 8.1 \"Functions shall have a prototype...\". And if the bananas function had been placed below main() instead of above, the code wouldn't even compile.
So I fail to see the point of rule 16.4, it seems redundant to me.