Que signifient les parenthèses autour d'un nom de fonction?

dans un de mes fichiers source de projet, j'ai trouvé cette définition de la fonction C:

int (foo) (int *bar)
{
    return foo (bar);
}

Note: il n'y a pas d'astérisque à côté de foo , donc ce n'est pas un pointeur de fonction. Ou est-il? Ce qui se passe ici avec l'appel récursif?

211
demandé sur Peter Mortensen 2012-11-28 12:27:44
la source

3 ответов

En l'absence de toute préprocesseur trucs en cours, foo 's la signature est équivalent à

int foo (int *bar)

le seul contexte dans lequel j'ai vu des gens mettre des parenthèses apparemment inutiles autour des noms de fonction est quand il y a à la fois une fonction et une macro semblable à une fonction avec le même nom, et le programmeur veut empêcher l'expansion macro.

cette pratique peut sembler un peu étrange au début, mais la bibliothèque C crée un précédent par fournissant certaines macros et fonctions avec des noms identiques .

une telle fonction/paire de macros est isdigit() . La bibliothèque pourrait la définir comme suit:

/* the macro */
#define isdigit(c) ...

/* the function */
int (isdigit)(int c) /* avoid the macro through the use of parentheses */
{
  return isdigit(c); /* use the macro */
}

votre fonction semble presque identique à celle ci-dessus, donc je soupçonne que c'est ce qui se passe dans votre code aussi.

328
répondu NPE 2017-04-12 10:31:25
la source

les paranthèses ne changent pas la déclaration - c'est encore définir une fonction ordinaire appelée foo .

la raison pour laquelle ils ont été utilisés est presque certainement parce qu'il ya une fonction comme la macro appelée foo défini:

#define foo(x) ...

en utilisant (foo) dans la déclaration de fonction empêche cette macro d'être étendue ici. Donc, ce qui se passe probablement est qu'une fonction foo() est en cours de définition avec son corps étant élargi de la macro de fonction-comme foo .

37
répondu caf 2012-11-28 12:34:20
la source

les parenthèses n'ont pas de sens.

Le code que vous montrez n'est rien d'autre qu'une récursion infinie.

en définissant un pointeur de fonction, vous voyez parfois des parenthèses étranges qui signifient quelque chose. Mais ce n'est pas le cas ici.

-3
répondu ugoren 2012-11-28 12:30:34
la source

Autres questions sur c function parentheses