Возможный дубликат:
что означает этот typedef? прототип функции?
Сегодня я столкнулся с этим синтаксисом
typedef double (d2d)(double);
cdecl сообщает мне, что это функция, возвращающая двойной (в отличие от указателя на функцию, возвращающую double). Поэтому давайте посмотрим, как это работает:
#include <stdio.h>
typedef double (d2d)(double);
//typedef double (*d2d)(double); // the "usual" way
double twice(double x)
{
return x * 2.0;
}
double apply(d2d f, double x)
{
return f(x);
}
int main()
{
printf("%f\n", apply(twice, 2.0)); // Prints 4.0000
return 0;
}
Удивительно, что GCC 4.2.1 скомпилировал его без проблем. Мне просто интересно узнать, каковы тонкие различия между этим и "обычным" способом для typedef
указателя функции?