2012-05-26 14 views
10

Duplicar posible:
C function syntax, parameter types declared after parameter listFunción definición C

vi la siguiente sintaxis para la definición de la función de "Experto Programación C"

int compare(s1, s2) 
    char * s1, *s2; 
{ 
    while (*s1++ == *s2) { 
     if (*s2++ == 0) return (0); 
    } 
    return (*--s1 - *s2); 
} 

¿Cómo es la arriba definición válida? Se compila y funciona perfectamente sin ningún error.

estoy más cómodo con la siguiente sintaxis para la definición de la función

int compare(char * s1,char *s2) 
{ 
    while (*s1++ == *s2) { 
     if (*s2++ == 0) return (0); 
    } 
    return (*--s1 - *s2); 
} 

y no hay donde he visto la dada en el libro (C Mientras estudiaba en mi colegio o en otro lugar), puede alguien por favor tirar algo de luz sobre el dado en el libro.

+5

Es la sintaxis antigua y obsoleta para la declaración de funciones. A veces llamado "estilo K & R". – cnicutar

+3

Es un estilo antiguo, pero aún así es aceptado por el idioma. Por cierto: no creo que un libro "de programación C experto" debe contener 'retorno (0);' Hace – wildplasser

+0

de 20 años, compiladores que no podía manejar la segunda sintaxis * * eran bastante comunes todavía. – Amadan

Respuesta

6

En este tema se ha discutido here antes, es el "estilo Kernighan y Ritchie" de la definición de la función.

En la actualidad, debe preferir la segunda sintaxis, la primera sigue siendo aceptada por algunos compiladores por razones de compatibilidad con versiones anteriores, pero se debe considerar obsoleta para todos los propósitos prácticos.

+1

Gracias por la respuesta y lo siento si algunos usuarios piensan que es un duplicate..In mi defensa Nunca supe existe una sintaxis de estilo K & R para C, siempre he visto ANSI C, incluso programas en Internet sintaxis tenido similar a ANSI C ... Así que lo primero que se me vino a la mente fue un error tipográfico de un libro y mi pregunta realmente fue cómo puede funcionar esto todavía. Gracias. –

+1

@Kartik ¡No hay necesidad de disculparse! Parece que esta pregunta se cerrará como un duplicado de esa, pero eso no debe tomarse como un insulto. No significa que hayas hecho una pregunta mala o algo así. Está bien no saber que existía el estilo K & R; para eso estamos aquí! –

+0

@CodyGray Gracias –

3

Ésta es la sintaxis de pre-ANSI, a veces llamado el K&R C. Era la sintaxis original del lenguaje C.

Cuestiones relacionadas