2010-04-09 9 views
10

algunas veces veo que las funciones se definen de la siguiente manera:¿Por qué los tipos de parámetros se declaran fuera del paréntesis?

read_dir(dir) 
char *dir; 
{ 
     DIR * dirp; 
     struct dirent *d; 

     /* open directory */ 
     dirp = opendir(dir); 
    ......... so on 

aquí cuál es la importancia de la declaración

char *dir; 

¿cuál es la intención detrás de declarar el puntero poco después del nombre de la función y luego comenzando el cuerpo de la función.

Respuesta

12

Es una sintaxis C más antigua, kalled "K&R C", ya que es como apareció en la versión original del legendary book.

lo que antes se escribe así:

foo(a, b) 
int a; 
int b; 
{ 
} 

es ahora

int foo(int a, int b) 
{ 
} 
8

Es simplemente "viejo estilo", K&R C definición de función (ver Kernighan & Ritchie's book, comúnmente conocida como simplemente Kernighan & Ritchie.)

El código que hacen referencia puede haber sido escrito a finales de los años ochenta, o principios de los noventa con la portabilidad (es decir, la compatibilidad con compiladores más antiguos, posiblemente en plataformas más "exóticas") en mente.

Incluso después de la publicación de la norma 1989, C, durante muchos años K & RC todavía era considerado el "mínimo común denominador" a la que los programadores de C restringen a sí mismos cuando se desea la máxima portabilidad, ya que muchos compiladores anteriores estaban todavía en uso, y porque cuidadosamente escrito K & RC código puede ser legal estándar C también.

Algunas personas creen que pueden que K definición de función & de estilo R, siendo apoyado por los compiladores, son más legibles, que de hecho no es necesariamente cierto; Comparar:

some_function(param1,param2,param3) 
char *param1; /* param1 comment */ 
int  param2; /* param2 comment */ 
short param3; /* param3 comment */ 
{ 
} 

con

/* notice also that return type is explicitly specified now */ 
int 
some_function(
    char *param1, /* param1 comment */ 
    int  param2, /* param2 comment */ 
    short param3 /* param3 comment */ 
) 
{ 
} 

K & definiciones de funciones de tipo I han sido obsoleta desde 1989; ver sección 6.9.5 "Definiciones de funciones" en el estándar C90.

Cuestiones relacionadas