PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C - Funktionen "überladen" mit gleichnamigen Pointern



sticky bit
19-05-2004, 20:04
Eigentlich mehr aus Spielerei bin ich heute drauf gekommen, dass ich ja mal das sonst eher von diversen OOP Sprachen bekannte Funktions Overloading in C abzubilden. Ich hab mir gedacht vielleicht funzt das, wenn ich nen gleichnamigen Pointer erzeuge und den einfach auf ne andere Funktion zeigen lasse. Also in etwa so:

#include <stdio.h>
#include <stdlib.h>

int overload (void)
{
printf("%s", "Die nicht ganz so zufaellige Zahl lautet: ");

return 0;
}

int main (int argc, char **argv)
{
int (*rand)(void);

rand = overload;

printf("%i\n", rand());

return(0);
}
Und cool, das haut sogar hin. Jetzt frag ich mich aber doch, ist dieses Verhalten irgendwie definiert, was der Compiler machen soll wenn er auf so eine Situation stösst oder ist das halt Zufall, dass das mit dem gcc klappt, andere Compiler hingegen würden aber die Funktion (die als solche als Prototyp vorhandene) vorziehen, oder wie sieht das aus?

wraith
19-05-2004, 22:49
Original geschrieben von sticky bit
Jetzt frag ich mich aber doch, ist dieses Verhalten irgendwie definiert, was der Compiler machen soll wenn er auf so eine Situation stösst oder ist das halt Zufall, dass das mit dem gcc klappt, andere Compiler hingegen würden aber die Funktion (die als solche als Prototyp vorhandene) vorziehen, oder wie sieht das aus?
Die Variable rand im inneren Scope der main Funktion überdeckt die Sichtbarkeit von rand (Funktion aus stdlib.h), hier immer, auf jedem Compiler.
Das Programm ist also korrekt.

Aber ehrlich gesagt, weiß ich nicht was du damit bezwecken willst, mit überladen (und auch mit 'überladen') hat es ja überhaupt nichts zutun.

Bedenke noch, daß rand ein reserviertes Wort ist, falls stdlib.h includet ist, und damit als Identifier mit externer Bindung nicht erlaubt ist (in deinem Bsp unerheblich, aber falls du das noch 'ausweiten' wolltest).

sticky bit
20-05-2004, 00:16
Hmm, hab mir schon gedacht, dass der Scope da ne Rolle spielen könnte, Danke für Deine Antwort.

Bezwecken will ich damit eigentlich gar nichts, deshalb hab ich auch geschrieben "mehr aus Spielerei", einfach nur lustig zu sehen was man teilweise alles anstellen kann, auch wenn es sinnfrei sein mag... ;) :D

manjo
20-05-2004, 08:39
Hallo!

Es kann durchaus sehr sinnvoll, Funktionen zu überladen auch in C. Wir entwickeln Software, die in ihrem Kern in vielen Projekten gleich ist. Dennoch muss die Möglichkeit bestehen, einzelne Funktionen nach Bedarf im Projekt auszutauschen. Dies geschieht entweder über Funktionspointerlisten oder durch das Überladen von Funktionen.

Gruss,

Manjo.