retorno - ¿Cuál es esta extraña sintaxis de definición de función en C?
parametros formales en c (6)
Es realmente el código C antiguo, donde primero especifica los nombres de los argumentos y luego sus tipos. Ver por ejemplo here .
Esta pregunta ya tiene una respuesta aquí:
Recientemente, he visto algunas definiciones de funciones como esta mientras jugaba con GNU Bison:
static VALUE
ripper_pos(self)
VALUE self;
{
//code here
}
¿Por qué el tipo de self
fuera del paréntesis? ¿Es esto válido C?
Esas son antiguas declaraciones de parámetros de función de estilo K & R, que declaran los tipos de los parámetros por separado:
int func(a, b, c)
int a;
int b;
int c;
{
return a + b + c;
}
Esto es lo mismo que la forma más moderna de declarar parámetros de función:
int func(int a, int b, int c)
{
return a + b + c;
}
Las declaraciones de "nuevo estilo" son, básicamente, universalmente preferidas.
Esta es la llamada variante "antigua" de declarar argumentos de función. En los viejos tiempos, no se podía simplemente escribir tipos de argumentos dentro del paréntesis, pero había que definirlo para cada argumento justo después del paréntesis de cierre.
En otras palabras, es equivalente a ripper_pos( VALUE self )
Esto es viejo c. K & R C usó esta convención, antes de los parámetros tipeados ANSI C.
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''.
Sí, utiliza un estilo anterior de definición de función en el que los parámetros, sin tipo, se enumeran entre paréntesis, seguidos de la declaración de esas variables con sus tipos antes de la llave de apertura del cuerpo de la función. Entonces el self
es de tipo VALUE
.