这两个声明之间有什么区别:
double math_operation(double x, double (*func)(double));
double math_operation(double x, double func(double));
[它们似乎都在GCC中使用相同的精确调用:
math_operation(2.0, sqrt);
是只是语法糖还是它还有更多?
这两个函数声明
double math_operation(double x, double (*func)(double));
double math_operation(double x, double func(double));
声明相同的一个功能。尽管编译器可能会发出一条消息,指出存在多余的声明,但您可能会在程序中同时包含这两个声明。
编译器隐式地将具有函数类型的参数调整为该函数的指针类型的参数。
注意:通常所有这些函数声明都声明相同的一个函数
double math_operation(double, double (*)( double ) );
double math_operation(double, double ( double ) );
double math_operation( const double, double (*)( double ) );
double math_operation( const double, double( double ) );
double math_operation(double, double (*)( const double ) );
double math_operation(double, double ( const double ) );
double math_operation( const double, double (*)( const double ) );
double math_operation( const double, double( const double ) );
从C标准(6.7.6.3函数声明符(包括原型))
8将参数声明为“函数返回类型”应为 调整为“函数返回类型的指针”,如6.3.2.1。