Das das sein?
-
Wenn man folgendes von Borland compilieren läßt,warnt er,das es sich um einen alten Stil der Funktions-Definition handelt,aber läßt es durchgehen,und es scheint auch zu funktionieren:
#include <iostream.h> void foo(int); void foo(dfg) { cout<<dfg; }; int main(void) { foo(10); return 0; };
WANN und WARUM war das erlaubt?Ich habe in einem älteren C-Buch mal nachgesehen,konnte aber keine Beispiele dafür finden.Oder ist das ein Sonderfall,der früher möglich war,so daß der Prototyp einer Funktion ihre Argumenten-Typen bestimmt hat.Das müßte demnach ja vor den Zeiten von Überladenen Funktionen und Co. gewesen sein,denn folgendes wäre ja übel:
void foo(int); void foo(double); void foo(Zahl) { //welchen Typ will ich?int oder double? }
Kann mir das jemand erklären?
MFG,
g_e.
-
hi,
was warnt er denn genau (bitte buchstabengetreu
)?
naja im ersten bsp. ist ja klar wie dass gemeint ist, desswegen lässt ers durchgehen. und im zweiten wird er höchstwahrscheinlich einen fehler ausgebn.
lw
-
Geschichtsstunde. *meld*
Original erstellt von ghost_error:
Wenn man folgendes von Borland compilieren läßt,warnt er,das es sich um einen alten Stil der Funktions-Definition handelt,aber läßt es durchgehen,und es scheint auch zu funktionieren:In C++ hat es diesen 'alten Stil' niemals gegeben. In C schon.
Das müßte demnach ja vor den Zeiten von Überladenen Funktionen und Co. gewesen sein
Was nicht so verwunderlich ist, weil man in C immer noch keine Funktionen überladen kann.
,denn folgendes wäre ja übel:
Nein. Man konnt zu K&R-Zeiten zB einen double so an eine Funktion übergeben:
gets_a_double(d) double d; { printf("%d\n", d); }
Damals galt noch die 'implizit int'-Regel, die besagt hat, dass, wenn der Programmierer in speziellen Kontexten, keinen Typ angibt, ein int verwendet wird. Situationen wo das galt waren (eindeutig erkennbare) Deklarationen ('static a;' bedeutet 'static int a;'), bei Funktionsrückgabewerten (obige Funktion gibt einen 'int' zurück, 'void' gab es noch nicht) und Parametern (deine Funktion spezifiziert verlänge also einen int-Parameter). Auf Dateiebene musste man 'int' auch nicht dazuschreiben, ('a;' ist nämlich außerhalb von Funktionen eindeutig). ZB die C-Referenz (http://cm.bell-labs.com/cm/cs/who/dmr/) weiß da noch etwas mehr.
Darf ich mich wieder setzten?
-
Ja.
Hab ich nicht gewusst, weil C "vor meiner Zeit" liegt.
lw
-
Ah,mille grazie!
Das war die Antwort nach der ich gesucht habe.
mit C habe ich mich niemals richtig beschäftigt,aber dann war ja meine Vermutung immerhin schon richtig.
Vielen Dank.
g_e.