ANSI C Funktionen überschreiben?
-
hmmm .... vielleicht so:
#include <stdio.h> #define printf meinefunc int meinefunc(char *str) { puts("meinefunc"); puts(str); return 0; } int main(void) { printf("Hallo Welt"); return 0; }
Ist aber sehr 'dreckig'...
-
Original erstellt von Bashar:
Portabel ersetzen geht logischerweise nicht.Wieso logisch? Bei C++ kann ich auch meine Funktionen über die der WinAPI "legen". Vielleicht gibts ja in C was ähnliches? (ja ich weiss, ANSI C != C++, und ich weiss auch, dass ich das in C++ nur kann weil ich da die Möglichkeit von namespaces habe...)
Stdlib ersetzen ist zwar bestimmt ein Weg aber nicht grad mein weg (o;
Ist auch mehr ne informelle frage... nicht ein aktuelles Problem.
-junix
-
inwiefern kannst du das in C++?
du kannst nur mit namespaces arbeiten...erklär mal was du machen willst, dann können wir sicher eine lösung finden.
-
Original erstellt von Shade Of Mine:
inwiefern kannst du das in C++?
du kannst nur mit namespaces arbeiten...Original erstellt von junix:
[...]und ich weiss auch, dass ich das in C++ nur kann weil ich da die Möglichkeit von namespaces habe...)[...]Original erstellt von Shade Of Mine:
erklär mal was du machen willst, dann können wir sicher eine lösung finden.Original erstellt von junix:
[...]Hintergrund:
Das Gedankenspiel ging darum, portablen Code zu schreiben. Angenommen, ich hab einen Microcontroller mit Display und möchte gerne die Display-Ausgabe über printf lösen. So müsste ich ja printf irgendwie beibringen können, wie man das Display ansteuert? (Also z.B. ersetzen)<edit>Vielleicht um das etwas zu ergänzen: Die Idee ist dabei die, dass ich ein in ANSI C verfasstes Programm (mal von dem uC spezifischen IO Operationen abgesehen und nur auf ein Display beschränkt) z.B. mit dem Konsolen Compiler übersetzen kann und dann das Programm die Selben Ausgaben macht, welche es sonst auf das Display machen würde. (OHNE nochmals Hand an das Programm zu legen)</edit>
[ Dieser Beitrag wurde am 30.06.2003 um 16:56 Uhr von junix editiert. ]
-
Original erstellt von junix:
(OHNE nochmals Hand an das Programm zu legen)</edit>**
**wie sollte das in C++ gehen??
das geht normalerweise mit #ifdef
oder du verwendest das MVC Modell und bindest je nachdem immer die richtigen View 'klassen' ein. In C geht das natuerlich nicht so schöenmit klassen, aber es funktioniert trotzdem.
-
Du hast nicht begriffen was ich will. Ich will libc funktionen ersetzen... Das kann ich in C++ sehr schön, indem ich einfach hin gehe, und eine andere Implementationsfile einbinde....
hier geht das mit Standard C Funktionen wie Printf allerdings nicht, denn ich kann ja nicht gut die ganze LibC wegschmeissen und selber implementieren (o;
-junix
-
Mal versucht per
#undef printf
deklaration von printfwas zu machen? Wenn das klappt muss dafür natürlich diese Datei imemr NACH der stdlib eingebunden werden.
-
Original erstellt von junix:
Du hast nicht begriffen was ich will. Ich will libc funktionen ersetzen... Das kann ich in C++ sehr schön, indem ich einfach hin gehe, und eine andere Implementationsfile einbinde....jo, ich begreifs immer noch nicht. warum kannst du das in C nicht?
-
junix? deine antwort wird erwartet.
oder machst du jetzt nen rückzieher?
-
Original erstellt von Shade Of Mine:
jo, ich begreifs immer noch nicht. warum kannst du das in C nicht?Original erstellt von junix:
hier geht das mit Standard C Funktionen wie Printf allerdings nicht, denn ich kann ja nicht gut die ganze LibC wegschmeissen und selber implementierenOder ist es definiert, wie sich der Linker verhält? (So Quasi "Erst wenn du das Symbol nicht in den Projekt Objects findest, darfst du in der std. Library suchen...")
das mit dem Undef ist etwas hässlich. Auch wenn ich z.B. trotzdem noch wieder auf die alte Funktion zugreifen möchte. C++: Kein Problem :: (Global Namespace) und gut is. C hat aber keine namespaces...
-junix
[ Dieser Beitrag wurde am 01.07.2003 um 14:28 Uhr von junix editiert. ]