Überladen / Überschreiben von Funktionen in C möglich?
-
Rio_1 schrieb:
also deklaration von 2 verschiedenen Funktionen mit gleichen Funktionsnamen, aber unterschiedlichen Parametern, welche abhängig davon die jeweilge Funktion beim Aufruf wählt..
das kriegt man bestimmt mit'n paar defines und # und ## hin
-
Gegenfrage: Was hast du vor? Und muß die Lösung unbedingt in C sein?
-
CStoll schrieb:
Und muß die Lösung unbedingt in C sein?
vielleicht ist ihm assembler zu umständlich
-
Undertaker schrieb:
CStoll schrieb:
Und muß die Lösung unbedingt in C sein?
vielleicht ist ihm assembler zu umständlich
Ich wußte gar nicht, daß man in Assambler Funktionen überladen könnte (OK, eigentlich wußte ich nicht einmal, daß man in Assambler überhaupt Funktionen hat)
-
CStoll schrieb:
(OK, eigentlich wußte ich nicht einmal, daß man in Assambler überhaupt Funktionen hat)
man lernt nie aus --> http://en.wikipedia.org/wiki/High-level_assembler
-
supertux schrieb:
nein, das geht auch nicht.
Sicher? Es wäre zwar umständlich, aber mit einem enum, einer Struktur und einem void-pointer wäre es definitiv möglich :D.
-
Sicher? schrieb:
supertux schrieb:
nein, das geht auch nicht.
Sicher? Es wäre zwar umständlich, aber mit einem enum, einer Struktur und einem void-pointer wäre es definitiv möglich :D.
ich bin 100% sicher. Wie soll es denn gehen?
-
Es ist hier zwar ein altes thema, aber ich würde es gern nochmal aufgreifen...
Warum ist denn Überladen in C nicht möglich? Gibt es dazu glaubwürdige Quellen, die dies beweisen?
-
Ichwillswissen schrieb:
Es ist hier zwar ein altes thema, aber ich würde es gern nochmal aufgreifen...
Warum ist denn Überladen in C nicht möglich? Gibt es dazu glaubwürdige Quellen, die dies beweisen?
Probier's aus, merke, dass es nicht klappt und sei zufrieden, dass du die These bestätigt hast...
-
Ichwillswissen schrieb:
Es ist hier zwar ein altes thema, aber ich würde es gern nochmal aufgreifen...
Warum ist denn Überladen in C nicht möglich? Gibt es dazu glaubwürdige Quellen, die dies beweisen?
weil die Leute, die C spezifiziert haben, keine Notwendigkeit darin gesehen haben (weil unter anderem die ABI schwerer als nötig gemacht wird, und dadurch wäre einer der Vorteile von C dahin), Funktionen zu überladen.
Ich mag keine Überladung, ich finde das verwirrender als hilfreicher. Just my 2 cents.
-
supertux schrieb:
Ich mag keine Überladung, ich finde das verwirrender als hilfreicher. Just my 2 cents.
Sehe ich auch so. Es ist imho sinnvoller, die Unterscheidung im Funktionsnamen festzuhalten.
-
_matze schrieb:
supertux schrieb:
Ich mag keine Überladung, ich finde das verwirrender als hilfreicher. Just my 2 cents.
Sehe ich auch so. Es ist imho sinnvoller, die Unterscheidung im Funktionsnamen festzuhalten.
sehe ich ebenfalls so. jede information, die im quelltext nicht sichtbar ist, trägt ein stückchen dazu bei, dass code schwerer verständlich wird. wobei sich das mit funktionsüberladungen noch in grenzen hält. ein wirklich starke sourcecode-verschlüsselung erreicht man mit operatorüberladung. nicht prinzipiell, aber so wie es z.b. C++ macht.
-
+fricky schrieb:
nicht prinzipiell, aber so wie es z.b. C++ macht.
Ja ja, immer voll auf die Zwölf...
-
Ichwillswissen schrieb:
Es ist hier zwar ein altes thema, aber ich würde es gern nochmal aufgreifen...
Warum ist denn Überladen in C nicht möglich? Gibt es dazu glaubwürdige Quellen, die dies beweisen?
Eher das Gegenteil: Guckst Du hier http://students.ceid.upatras.gr/~sxanth/lwc/ex6.html, hier http://students.ceid.upatras.gr/~sxanth/lwc/ex12.html und hier:http://students.ceid.upatras.gr/~sxanth/lwc/ex7.html sowie http://students.ceid.upatras.gr/~sxanth/lwc/ex8.html
Geht nicht gibt's nicht
EDIT: Hatte zuerst Beispiele übersehen. Nachtrag: Das Zeug funktioniert wirklich. Unschön ist halt, daß beim Debuggen oft der Bezug zur Source schlecht nachvollziehbar ist. Muß also jeder für sich selbst entscheiden, ob das praktisch ist. Davon abgesehen kann man sich ja mit Funktionspointern eine Art Überlademechanismus "handschnitzen".
-
pointercrash() schrieb:
...
Geht nicht gibt's nicht ;)...was hat das mit überladen zu tun:
Will be translated to the C program
/************* Function Prototypes ************/FILE *oper_comma_OvErlOaD_PS_IO_FILEPc2(FILE * f, char *s);
FILE *oper_comma_OvErlOaD_PS_IO_FILEPv2(FILE * f, void *p);
FILE *oper_comma_OvErlOaD_PS_IO_FILEi2(FILE * f, int i);
void oper_thingy(void *p);
sind doch alles verschiedene funktionsnamen.
-
pointercrash() schrieb:
Ichwillswissen schrieb:
Es ist hier zwar ein altes thema, aber ich würde es gern nochmal aufgreifen...
Warum ist denn Überladen in C nicht möglich? Gibt es dazu glaubwürdige Quellen, die dies beweisen?
Eher das Gegenteil: Guckst Du hier http://students.ceid.upatras.gr/~sxanth/lwc/ex6.html, hier http://students.ceid.upatras.gr/~sxanth/lwc/ex12.html und hier:http://students.ceid.upatras.gr/~sxanth/lwc/ex7.html sowie http://students.ceid.upatras.gr/~sxanth/lwc/ex8.html
Geht nicht gibt's nicht
uuhhh .... wie krank ist das...
-
Krank? Nein! In etwa macht es so der C++ Compiler. Es hat auch nichts mit Overloading in C zu tun, da es kein C ist, sondern nur, wie Overloading in C++ (ist ne andere Sprache) nach C durch einen Praeprozessor realisiert werden koennte.
-
knivil schrieb:
In etwa macht es so der C++ Compiler.
also doch krank.
-
Fuer den einen ist es normal, fuer den anderen halt ... krank.
-
knivil schrieb:
Krank? Nein! In etwa macht es so der C++ Compiler. Es hat auch nichts mit Overloading in C zu tun, da es kein C ist sondern nur, wie Overloading in C++ (ist ne andere Sprache) nach C durch einen Praeprozessor realisiert wirden koennte.
Right! Natürlich ist das kein "natives" Overloading in C, sondern dessen Simulation. Wobei die Vorgehensweise tatsächlich der eines C++- Compilers ähnelt.
Die andere Möglichkeit, die schon kurz angesprochen wurde, wäre selbstmodifizierender Code, aber das scheuen Informatiker mehr als der Teufel das Weihwasser und die Prozessordesigner unterstützen die Phobie oft durch totale Trennung von Daten- und Programmbereichen.
Somit weiß C davon folglich auch nichts; in Assembler habe ich aber schon bestimmte Timings hingetrickst, die anders nicht zu erreichen waren.Darüber hinaus fällt mir nichts ein, was mit selbstmodifiziertem Code arbeiten würde ...