2010-04-09 9 views
10

alcune volte vedo che le funzioni sono definite come di seguito:Perché i tipi di parametro dichiarati al di fuori della parentesi?

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

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

ecco qual è l'importanza della dichiarazione

char *dir; 

qual è l'intenzione dietro dichiarando il puntatore subito dopo il nome della funzione e poi iniziando il corpo della funzione.

risposta

12

È una sintassi C precedente, chiamata "K&R C" poiché è come appariva nella versione originale di legendary book.

quello che era scritto così:

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

è ora

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

E 'solo "vecchio stile", K&R C definizione di funzione (vedi Kernighan & Ritchie's book, comunemente definita semplicemente come Kernighan & Ritchie.)

Il codice si fa riferimento potrebbe essere stato scritto alla fine degli anni ottanta, o primi anni novanta con portabilità (cioè compatibilità con vecchi compilatori, possibilmente su piattaforme più "esotiche") in mente.

Anche dopo la pubblicazione del C di serie del 1989, per molti anni K & RC era ancora considerato il "minimo comune denominatore", a cui i programmatori C si sono limitate quando la massima portabilità è stata voluta, dal momento che molti compilatori più anziani erano ancora in utilizzare, e poiché il codice RC K & è stato scritto con attenzione, può essere anche lo standard C legale.

Alcune persone possono credere che K definizione di funzione & R-style, ancora supportato da compilatori, sono più leggibili, che in realtà non è necessariamente vero; confrontare:

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 & definizioni di funzioni in stile R sono stati obsoleti dal 1989; vedere sezione 6.9.5 "Definizioni delle funzioni" nello standard C90.

Problemi correlati