Przed standardem ANSI C z 1989 roku, C nie posiadało prototypów (deklaracje funkcji określające typy parametrów); te staroświeckie deklaracje i definicje były wszystkim, co było dostępne.
W 1989 r. Standard ANSI C (który stał się standardem ISO C z 1990 r.) Wprowadził prototypy. Jeśli dobrze pamiętam, pomysł faktycznie pochodził z C++ (który nie był jeszcze wtedy ujednolicony). Deklaracje i definicje w starym stylu pozostawały legalne, więc stary kod mógł zostać skompilowany. W standardzie z 1989 roku stwierdzono również, że deklaracje w starym stylu były "przestarzałe", co oznacza, że można je usunąć w przyszłej wersji standardu.
Norma ISO C z 1999 r., Która (oficjalnie) zastąpiła standard z 1990 r., Pozostawiła to w spokoju; deklaracje i definicje w starym stylu są nadal legalne, a wszystkie zgodne kompilatory muszą je wspierać (choć mogą o nich ostrzec, ponieważ mogą ostrzec o wszystkim innym).
Od latest C201X draft (duży plik PDF) ten nadal nie zmienił się. Deklaracje i definicje funkcji w starym stylu są nadal wymaganą częścią języka, a wszystkie zgodne kompilatory muszą je obsługiwać. (Osobiście uważam to za niefortunne.)
C++, z drugiej strony, nigdy (?) Nie wspierało niczego poza prototypami jako deklaracjami funkcji; Stroustrup nie był tak zaniepokojony utrzymaniem kompatybilności ze starym kodem C.
Ale jeśli nie musisz utrzymywać bardzo starego kodu i/lub używać bardzo starych kompilatorów, nie ma powodu, aby używać deklaracji funkcji lub definicji w starym stylu.
Należy zauważyć, że, przynajmniej w C, tej definicji:
int main() {
/* ... */
}
jest rzeczywiście definicja starym stylu. Jest to poprawne dla C++, gdzie jest to prototyp wskazując, że main
nie posiada parametrów, ale w C powinno być
int main(void) {
/* ... */
}
(C++ również akceptuje tę formę dla kompatybilności z C - ale do czasu piszesz main
, powinieneś już zdecydować, jakiego języka używasz.)
Nie powinieneś arbitralnie kompilować kodu C jako C++. Jeśli musisz użyć go z kodem C++, możesz połączyć ten kod ze sobą i powiedzieć swojemu kodowi C++, aby używał C-łącznika ('extern" C "'). – jamesdlin
Pamiętam, że widziałem tę składnię po raz pierwszy, około 1982 roku. Myślałem, że to kolana pszczół! (Po FORTRAN, wiele rzeczy wygląda jak kolana pszczół.) – TonyK