2010-10-04 17 views
8

¿Cuál es la diferencia entre las dos declaraciones siguientes:declaraciones ambiguas

1. int foo(int); 
2. int foo(int()); 

no estoy seguro de si las dos declaraciones son equivalentes. ¿Qué hace que (2) sea diferente de (1)?

+2

Salida http: //cdecl.org ... esto será útil ... – liaK

Respuesta

13

int foo(int); es la declaración de una función de tomar un entero como argumento y devuelve un número entero, así

int foo(int()); declara una función de tomar como argumento "un puntero a una función que devuelve int y teniendo {sin argumentos [en C++] y un número no especificado de argumentos [en C]} "y devolver un número entero.

(2) es equivalente a int foo(int (*pf)()) y int foo(int f())

+1

sin argumentos? Creo que te refieres a tomar argumentos no especificados pero no variados. '(void)' es la forma de especificar "sin argumentos". –

+2

@R Creo que solo es C, no C++ – Tom

+0

@R: Lo siento, me he perdido. Agregado a mi publicación. –