Ich wurde vor kurzem bewusst, dass die strdup()
-Funktion, die ich genossen habe so viel auf OS X ist nicht Teil von ANSI C, sondern Teil von POSIX. Ich möchte nicht meinen gesamten Code neu schreiben, also denke ich, ich werde nur meine eigene strdup()
Funktion schreiben. Es ist nicht so schwer, wirklich, es ist nur ein malloc()
und ein strcpy()
. Wie auch immer, ich habe die Funktion, aber was mache ich, wenn ich diese Funktion schreibe und sie mit meinem Code verbinde, und sie existiert bereits in der libc? Erlaubt mir mein Linker oder Compiler meine eigene Version der Funktion zu definieren oder muss ich einen anderen Namen geben? Es wäre schrecklich praktisch, wenn es einen Weg gäbe, denselben Namen wiederzuverwenden, so dass, wenn strcpy()
in der libc des Benutzers vorhanden ist, sie das verwenden könnten, aber wenn es nicht in ihrer libc existierte, könnten sie stattdessen meine Version mit so wenig verwenden Codeänderung wie möglich.strdup() Funktion
Die kurze Version:
a) Was passiert, wenn ich meine eigene Funktion mit dem gleichen Namen wie eine eingebaute Funktion schreiben?
b) Was kann ich tun, um zu verhindern, dass mir auf Plattformen, die strdup()
nicht haben, schlechte Dinge passieren, ohne meinen gesamten Code neu zu schreiben, um strdup()
nicht zu verwenden, was nur ein bisschen langweilig ist?
Wenn Sie ehrgeizig fühlen, könnten Sie sogar auto und autoconf eingerichtet, um die Makro zu konfigurieren notwendig zu testen, ob Sie strdup selbst definieren müssen, sondern alle Compiler aufzuzählen und Umgebungen Sie unterstützen möchten. –