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.