Hi, On Thu, 27 Feb 2003, Bernhard Walle wrote:
Und nein, Prototypen wurden nicht von C++ uebernommen, sondern sind schon in ANSI C90.
Ich verstehe jetzt nicht was in C90 aufgenommen wurde. Wie lief das frueher in C ohne Prototypen?
Tja, eben ohne Typechecking. C startete als wirklich einfache Sprache.
Musste die Funktion vor der Verwendung definiert werden (denn ohne Prototypen gibt es ja keine Deklaration ohne Definition) oder konnte sie `einfach so' verwendet werden, d. h. ohne eine Ueberpruefung der Argumente auf Anzahl und Typ.
Jau. Konnte einfach so verwendet werden. Und damals sahen Funktionsdefinitionen auch so aus (der beruehmte K&R Stil): int f(a) int a; { return a; } Dies ist immer noch in C99 erlaubt, aber schon explizit als obsolet deklariert. Die obige Definition erzeugt uebrigens _keinen_ Prototyp fuer "f", sondern macht nur "f" als Funktion bekannt.
Letzteres waere ja, naja, nicht so toll ;).
Das dachten sich mehrere Leute vor 1990 auch, und erfanden Prototypes ;)
Zweischneidig. Auf den ersten Blick ist dies eine vernuenftige Idee, nichtdestotrotz aber eine Abweichung vom Standard. Und zwar wuerde es eine _weitere_ sein.
Wie machen das eigentlich andere Compilerbauer (Microsoft/Intel/ Borland)? Warum kann man sich nicht (ohne Standard) auf ein gemeinsames Vorgehen einigen?
Naja, das gemeinsame Vorgehen wuerde ja gerade der Standard sein ;-) Es wuerde reichlich sinnlos sein, wenn sich alle compiler-vendors zusammensetzen um Extensions zu definieren, die dann auch alle implementieren, und dies Ding dann doch nicht Standard zu nennen ;) Die Schwierigkeit besteht eben auch darin Agreements zu bekommen. Ciao, Michael.