Prima dello standard ANSI C del 1989, C non aveva prototipi (dichiarazioni di funzioni che specificano i tipi di parametri); queste dichiarazioni e definizioni vecchio stile erano tutto ciò che era disponibile.
Nel 1989, lo standard ANSI C (che divenne essenzialmente lo standard ISO C 1990) introdusse prototipi. Se ricordo bene, l'idea in realtà proveniva dal C++ (che non era ancora stato standardizzato all'epoca). Le dichiarazioni e le definizioni vecchio stile sono rimaste legali, in modo che il vecchio codice possa ancora essere compilato. Lo standard del 1989 diceva anche che le dichiarazioni vecchio stile erano "obsolescenti", il che significa che potevano essere rimosse in una versione futura dello standard.
Lo standard ISO C del 1999, che (ufficialmente) ha superato lo standard del 1990, ha lasciato questo da solo; le dichiarazioni e le definizioni vecchio stile sono ancora legali e tutti i compilatori conformi devono supportarle (sebbene siano libere di avvertirle, poiché possono mettere in guardia su qualsiasi altra cosa).
A partire dal latest C201X draft (PDF di grandi dimensioni), questo è ancora non modificato. Le dichiarazioni e le definizioni delle funzioni vecchio stile sono ancora una parte necessaria della lingua e tutti i compilatori conformi devono supportarle. (Personalmente, considero questo sfortunato.)
C++, d'altra parte, non ha mai (?) Supportato altro che i prototipi come dichiarazioni di funzioni; Stroustrup non era preoccupato di mantenere la compatibilità con il vecchio codice C.
Tuttavia, a meno che non sia necessario mantenere codice molto vecchio e/o utilizzare compilatori molto vecchi, non vi è alcun motivo valido per utilizzare dichiarazioni o definizioni di funzioni vecchio stile.
Si noti che, almeno in C, questa definizione:
int main() {
/* ... */
}
è in realtà una definizione di vecchio stile. E 'corretto per C++, dove è un prototipo che indica che main
non ci sono parametri, ma in C dovrebbe essere
int main(void) {
/* ... */
}
(C++ accetta anche questa forma per la compatibilità con C - ma per il momento si sta scrivendo main
, dovresti già aver deciso quale lingua stai usando.)
Non dovresti compilare arbitrariamente il codice C come C++. Se hai bisogno di usarlo con il codice C++, puoi collegare il codice insieme e dire al tuo codice C++ di usare C-linkage ('extern" C "'). – jamesdlin
Ricordo di aver visto questa sintassi per la prima volta, verso il 1982. Pensavo fossero le ginocchia dell'ape! (Dopo FORTRAN, un sacco di cose sembrano le ginocchia delle api.) – TonyK