28 votes

Quelle est cette étrange syntaxe de définition de fonction en C?

J'ai vu quelques définitions de fonctions comme celle-ci récemment en jouant avec GNU Bison:

 static VALUE
ripper_pos(self)
    VALUE self;
{
    //code here
}
 

Pourquoi le type de self dehors de la parenthèse? Est-ce un C valide?

30voto

sth Points 91594

Ce sont d'anciennes déclarations de paramètres de fonction de style K&R, déclarant les types de paramètres séparément:

 int func(a, b, c)
   int a;
   int b;
   int c;
{
  return a + b + c;
}
 

C'est la même chose que la façon la plus moderne de déclarer des paramètres de fonction:

 int func(int a, int b, int c)
{
  return a + b + c;
}
 

Les déclarations de "nouveau style" sont fondamentalement universellement préférées.

9voto

Fyodor Soikin Points 7907

Il s'agit de la soi-disant "ancienne" variante de déclaration des arguments de fonction. Autrefois, vous ne pouviez pas simplement écrire des types d'argument entre parenthèses, mais vous deviez le définir pour chaque argument juste après la parenthèse fermante.

En d'autres termes, cela équivaut à ripper_pos( VALUE self )

4voto

mipadi Points 135410

Oui, il utilise un style de définition de fonction plus ancien dans lequel les paramètres, sans type, sont répertoriés entre parenthèses, suivis de la déclaration de ces variables avec leurs types avant l'accolade ouvrante du corps de la fonction. Donc self est de type VALUE .

3voto

Stephen Points 16714

C'est vieux c. K&R C a utilisé cette convention, avant que les paramètres typés ANSI C ne soient appliqués.

 static VALUE  // A static function that returns 'VALUE' type.
ripper_pos(self)  // Function 'ripper_pos' takes a parameter named 'self'.
    VALUE self;   // The 'self' parameter is of type 'VALUE'.
 

2voto

David Gladfelter Points 2756

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