2010-10-04 19 views
8

Jaka jest różnica między dwiema następującymi deklaracjami:Niejednoznaczne deklaracje

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

Nie jestem pewien, czy oba oświadczenia są równoważne. Co sprawia, że ​​(2) różni się od (1)?

+2

Odjazd http: //cdecl.org ... To będzie pomocny ... – liaK

Odpowiedz

13

int foo(int); jest deklaracja funkcji biorąc liczbę całkowitą jako argument i powrocie liczbę całkowitą, a także

int foo(int()); deklaruje funkcję bierze jako argument „wskaźnik do funkcji przekazujących int i biorąc {żadnych argumentów [w C++] i nieokreślona liczba argumentów [w C]} "i zwracająca liczbę całkowitą.

(2) jest równoważna int foo(int (*pf)()) i int foo(int f())

+1

sobą nie argumenty? Uważam, że masz na myśli podejmowanie nieokreślonych, ale nie variadycznych argumentów. '(void)' jest sposobem określenia "brak argumentów". –

+2

@R Wierzę, że to tylko C, a nie C++ – Tom

+0

@R: Przepraszam, że tęskniłem. Dodano do mojego postu. –