Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
16.3
#1
Just to make sure, does rule 16.3 also apply to declarations of function pointers?

void (*pt2Function)(int);

Sould I give a name to the parameter?
Does that make sense at all?
<t></t>
Reply
#2
Although the rule is worded in terms of declarations, the intention is that it should apply to all prototypes. A declaration of a function pointer should specify the parameter names, for example:

Code:
void (*pt2Function)(int size);

Any type-casts to function pointer types should also specify the parameter names in the prototype.
Posted by and on behalf of the MISRA C Working Group
Reply
#3
So, would the following code, built upon the original example, be in violation of the rule?
Code:
pt2Function a;
void a( int something_other_than_the_word_size ) {
    global_int = something_other_than_the_word_size;
}
Reply
#4
The example doesn't violate Rule 16.3 because the prototyped declaration of function a names its parameter.

However, the code doesn't seem to be valid anyway because:
  • pt2Function is declared as an object, not a type in the original example, so cannot be used to declare the object a
  • even if pt2Function were a type, a would be declared as an object and then redeclared as a function
Posted by and on behalf of the MISRA C Working Group
Reply
#5
Good point. Consider, however, the following:
Code:
typedef void (*pt2Function)(int stuff);
pt2Function a;
void b(int non_stuff)
    {}
void c()
    {
    a = b;
    }
Does this code violate the rule?
Reply
#6
Both prototype declarations, pt2Function and b, name their parameters so both are compliant with Rule 16.3.
Posted by and on behalf of the MISRA C Working Group
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)