3.10.2. Declaraciones y definiciones complicadas

Al margen, una vez que entienda cómo funciona la sintáxis de declaración de C y C++ podrá crear elementos más complicados. Por ejemplo:

//: V1C03:ComplicatedDefinitions.cpp

/* 1. */     void * (*(*fp1)(int))[10];

/* 2. */     float (*(*fp2)(int,int,float))(int);

/* 3. */     typedef double (*(*(*fp3)())[10])();
             fp3 a;

/* 4. */     int (*(*f4())[10])();

int main() {}

Estudie cada uno y use la regla derecha-izquierda para entenderlos. El número 1 dice «fp1 es un puntero a una función que toma un entero como argumento y retorna un puntero a un array de 10 punteros void».

El 2 dice «fp2 es un puntero a función que toma tres argumentos (int, int y float) de retorna un puntero a una función que toma un entero como argumento y retorna un float»

Si necesita crear muchas definiciones complicadas, debería usar typedef. El número 3 muestra cómo un typedef ahorra tener que escribir una descripción complicada cada vez. Dice «Un fp3 es un puntero a una función que no tiene argumentos y que retorna un puntero a un array de 10 punteros a funciones que no tienen argumentos y retornan doubles». Después dice «a es una variable de ese tipo fp3». typedef es útil para construir descripciones complicadas a partir de otras simples.

El 4 es una declaración de función en lugar de una definición de variable. Dice «f4 es una función que retorna un puntero a un array de 10 punteros a funciones que retornan enteros».

Es poco habitual necesitar declaraciones y definiciones tan complicadas como éstas. Sin embargo, si se propone entenderlas, no le desconcertarán otras algo menos complicadas pero que si encontrará en la vida real.