Page 1 of 1

16.3

Posted: Fri Apr 15, 2011 1:52 pm
by beckschulze
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?

Re: 16.3

Posted: Wed Apr 20, 2011 9:27 am
by misra-c
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: Select all

void (*pt2Function)(int size);
Any type-casts to function pointer types should also specify the parameter names in the prototype.

Re: 16.3

Posted: Wed May 23, 2012 6:44 pm
by gs
So, would the following code, built upon the original example, be in violation of the rule?

Code: Select all

pt2Function a;
void a( int something_other_than_the_word_size ) {
    global_int = something_other_than_the_word_size;
}

Re: 16.3

Posted: Fri May 25, 2012 9:59 am
by misra-c
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

Re: 16.3

Posted: Fri May 25, 2012 3:18 pm
by gs
Good point. Consider, however, the following:

Code: Select all

typedef void (*pt2Function)(int stuff);
pt2Function a;
void b(int non_stuff)
    {}
void c()
    {
    a = b;
    }
Does this code violate the rule?

Re: 16.3

Posted: Sun May 27, 2012 4:00 pm
by misra-c
Both prototype declarations, pt2Function and b, name their parameters so both are compliant with Rule 16.3.