include Methode gleicher Name
-
Hallo,
habe eine vielleicht dumme Frage.
Ich include string.h. Leider hat jemand anderes im Projekt schon in einer anderen Header- Datei den Methodennamen strcpy verwendet.
Das Programm lässt sich nun nicht kompilieren. Nach meiner Meinung liegt es an den oben genannten Problem.
Den Methodennamen will bzw. kann ich nicht ändern.
Was kann zur Lösung führen?MfG Szill
-
Szill schrieb:
Den Methodennamen will bzw. kann ich nicht ändern.
Was kann zur Lösung führen?Dann eigentlich nichts. Was man als Workaround machen könnte:
1. Gucken, ob du die Header vom Kollegen an dieser Stelle wirklich einbinden musst.
2. (Sehr umständlich, sehr unportabel): Du nimmst den string.h von deiner Standardbibliothek, streichst strcpy raus und bindest dies dann anstelle von string.h ein. Und hoffst, dass dies die einzige doppelte Funktion war.
3. Du fragst deinen Kollegen, was sein strcpy macht. Vermutlich mach es nämlich das gleiche wie das normale strcpy.
-
Szill schrieb:
Hallo,
habe eine vielleicht dumme Frage.
Ich include string.h. Leider hat jemand anderes im Projekt schon in einer anderen Header- Datei den Methodennamen strcpy verwendet.
Das Programm lässt sich nun nicht kompilieren. Nach meiner Meinung liegt es an den oben genannten Problem.
Den Methodennamen will bzw. kann ich nicht ändern.
Was kann zur Lösung führen?MfG Szill
Wenn Du der Chef bist:
Schicke dem anderen eine Abmahnung. Besser gleich eine fristlose Kündigung wegen geschäftsschädigenden Verhaltens.Wenn Du nicht der Chef bist:
Entscheide selbst.Tut mir leid, es gibt leider keine andere Lösung.
mfg Martin
-
Dann versuch den Namen der Funktion in string.h zu ändern.
// H A C K - START #define strcpy std_strcpy #include <string.h> #undef strcpy // H A C K - END
-
An alle ein herzliches Danke.
Der letzte Beitrag hat nach einigem Hin und Her funktioniert.
Gruss
-
Man sollte nicht Hack auf Hack türmen ... nachfolgende Generationen werden es dir danken, wenn du den Kollegen überzeugst, dass er das ändert.
-
Kann mir mal jemand das mit dem HACK erklären?
// H A C K - START #define strcpy std_strcpy #include <string.h> #undef strcpy // H A C K - END
Vielen Dank
-
leyden schrieb:
Kann mir mal jemand das mit dem HACK erklären?
// H A C K - START #define strcpy std_strcpy #include <string.h> #undef strcpy // H A C K - END
Vielen Dank
Es wird eine Textersetzung durchgeführt. Nähere Informationen findest du zu dem Thema auch hier:
http://de.wikipedia.org/wiki/C-PräprozessorZunächst wird gesagt, dass alles was strcpy ist durch std_strcpy ersetzt werden soll. Anschließend wird die Datei inkludiert, die diese Funktion enthält. Es wird also alles was strcpy ist durch std_strcpy ersetzt. Anschließend wird das Makro gelöscht, so das die Textersetzung abgeschaltet wird.
-
Vielleicht kommt dein Kollege auch aus C++-Gewässern, da kann man Funktionen (Methoden) auch mal überladen. In C nicht. Und seine eigene Funktion genauso zu nennen, wie eine aus einer C Standard-Bibliothek..., der schreit echt danach.
-
Ach ja, noch so ne Sache. Besonders in größeren Projekten macht es Sinn, eine gewisse Modulschreibweise einzuhalten. Egal, wie du es in deinem Projekt regelst: solange beide Funktionen ihren Namen behalten und jemand verwendet strcpy, dann wird in einem halben Jahr niemand mehr wissen, welches strcpy verwendet wird. Wenn dein Kollege ein eigenes "String-Modul" geschrieben hat, könnte er seine Funktion beispielsweise STR_strcpy nennen. Dann sieht man sofort, dass es keine C Standardfunktion ist und sie aus dem "String-Modul" kommt.
Natürlich gibt es verschiedene Meinungen dazu. Hab allerdings schon einige C-Projekte geschrieben, die dann als Sourcen verkauft wurden und mir wurde stets gesagt, dass die Sourcen äußerst gut zu lesen und nachzuvollziehen sind.