214 votes

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

Dans l’un de mes fichiers de source de projet, j’ai trouvé cette définition de la fonction C :

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

329voto

NPE Points 169956

En l'absence de toute préprocesseur choses qui se passent, foo's la signature est équivalent à

int foo (int *bar)

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

Cette pratique peut sembler un peu bizarre au premier abord, mais la bibliothèque C établit un précédent en fournissant des macros et des fonctions avec des noms identiques.

Une telle fonction/macro paire est isdigit(). La bibliothèque peut 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 est presque identique à celle ci-dessus, donc je suppose que c'est ce qui se passe dans votre code.

37voto

caf Points 114951

La parenthèse de ne pas modifier la déclaration, il est encore juste la définition d'une fonction ordinaire appelée foo.

La raison qu'ils ont été utilisés presque certainement parce que y est une fonction-comme macro appelée foo défini:

#define foo(x) ...

À l'aide de (foo) dans la déclaration de fonction empêche cette macro d'être élargi ici. Donc, ce qui est susceptible de se passer est qu'une fonction foo() est en cours de définition avec son corps étant élargi à partir de la fonction-comme la macro foo.

-3voto

ugoren Points 9835

Les parenthèses sont inutiles.
Le code que vous montrez n’est rien d’autre qu’une récurrence infinie.

Lorsque vous définissez un pointeur de fonction, vous voyez parfois étrange entre parenthèses qui signifient quelque chose. Mais ce n’est pas le cas en l’espèce.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X