MISRA Discussion Forums

Full Version: Rule 16.5
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Does this rule apply also to function pointers?
If I want to declare a function pointer which can be used for pointers to functions with different arguments, something like the following is useful:

uint8_t (* gen_u8p)();

Is this intended to be prohibited by the rule?
No, rule 16.5 does not apply to function pointers. However, note that:
  • Rule 8.1 requires a function prototype to be visible at call
  • Rule 11.1 does not permit a non-prototyped function pointer to be converted to a prototyped one

Therefore, a pointer to a non-prototyped function cannot be used to call a function and cannot be converted to a pointer that could be used to call a function.

The rationale is to avoid the undefined behaviour that occurs when a function is called by means of a pointer whose type is not compatible with the called function.