Meaning of rule 8.4 for function prototypes - Printable Version +- MISRA Discussion Forums (https://forum.misra.org.uk) +-- Forum: MISRA C (https://forum.misra.org.uk/forumdisplay.php?fid=4) +--- Forum: MISRA-C: 2004 rules (https://forum.misra.org.uk/forumdisplay.php?fid=17) +---- Forum: 6.8 Declarations and Definitions (https://forum.misra.org.uk/forumdisplay.php?fid=35) +---- Thread: Meaning of rule 8.4 for function prototypes (/showthread.php?tid=820) |
Meaning of rule 8.4 for function prototypes - dcrocker - 30-03-2011 Consider the following: File1.h: typedef short int int16_t; File2.h: short int foo(short int a); File3.h: int16_t foo(int16_t a); Does this break any MISRA rules? I ask because rule 8.3 states that for a function, the types in the prototype must match the types in the definition *exactly*. However, rule 8.4 states that when an object *or function* is declared more than once, the types in the declarations must be compatible, which is a weaker requirement. Why were the words "or function" included in rule 8.4? My intepretation is that if my source code includes a definition of function foo, then I must be violating rules 8.3 (because at most one of the prototypes can have types that exactly match the types in the definition); but it my code doesn't include a definition for foo (e.g. because it is in a compiler-supplied library), I am free to provide two or more prototypes for it with non-identical but compatible types. Re: Meaning of rule 8.4 for function prototypes - misra-c - 25-05-2011 This was not intentional and it will be corrected in the next version of MISRA C. |