2010-10-04 9 views
8

Quelle est la différence entre les deux déclarations suivantes:déclarations ambigües

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

Je ne suis pas sûr si les deux déclarations sont équivalentes. Qu'est-ce qui différencie (2) de (1)?

+2

Check out http: //cdecl.org ... ce sera utile ... – liaK

Répondre

13

int foo(int); est la déclaration d'une fonction qui prend un entier comme argument et retournant un entier et

int foo(int()); déclare une fonction qui prend comme argument « un pointeur vers une fonction renvoyant int et en prenant {aucun argument [en C++] et un nombre indéterminé d'arguments [en C]} "et renvoyant un entier.

(2) est équivalent à int foo(int (*pf)()) et int foo(int f())

+1

sans argument? Je crois que vous voulez dire prendre des arguments non spécifiés mais pas variés. '(void)' est le moyen de spécifier "no arguments". –

+2

@R Je crois que c'est seulement C, pas C++ – Tom

+0

@R: Désolé, j'ai raté ça. Ajouté à mon message. –