Home > Net >  Asking the syntax of Function pointer. - int (int)
Asking the syntax of Function pointer. - int (int)

Time:10-23

I've learned function pointer is used as :

double (*ptr)(double)

ptr = my_func1;

And also, using 'typedef' could be

typedef double (*func1)(double);

func1 my_func1;

But I can't understand why this code is valid below :

int main(void){
    test(a);
}

void test(int f(int))
{\
    int x;\
    (f==a)?(x=1):(x=2);\
    printf("%d",f(x));\
}

What's that int f(int)? Is it same syntax with function pointer?

I know the type int (*)int is valid, but I've never seen the type int (int).

And Also I can't understand why the syntax in the main fuction "int f(int) = func_1" is invalid but in the 'test' function's parameter int f(int) = a is valid.

Please tell me TT Thank you.

CodePudding user response:

int f(int) is a function declaration.

In C, two kinds of entities cannot be passed into functions, returned from functions or assigned: arrays and functions.

If parameters of these types are declared, they are silently turned into pointers.

A parameter int f(int) is changed to mean int (*f)(int), similarly to the way a parameter int a[3] is changed to int *a.

You might see a gratuitous warning if you declare a function one way, but define it the other; e.g.:

void test(int (*)(int));

void test(int f(int))
{
}

I've seen some version of GCC warn about this, even though it is correct; the definition and declaration are 100% compatible.

Because inside test, f is declared as a pointer, it is assignable:

f = some_func

However, in a situation where int f(int) declares a function, the identifier is not assignable:

{
  int f(int);     // "There exists an external f function" -- okay.
  f = some_func;  // Error; what? You can't assign functions!

}

Outside of function parameter declarations, functions and pointers to functions are distinguished in the usual way, as are arrays and pointers.

  •  Tags:  
  • cc99
  • Related