我最近意识到,我一直在OS X上使用的strdup()
函数并不是ANSI C的一部分,而是POSIX的一部分。我不想重写所有的代码,所以我想我会写自己的strdup()
函数。它其实并不难,只需要一个malloc()
和一个strcpy()
。无论如何,我有了这个函数,但如果我编写这个函数并将其链接到我的代码中,并且它已经存在于libc中,那么我在做什么呢?我的链接器或编译器是否允许我定义自己版本的函数,还是我必须给它另一个名称?如果有一种方法可以重复使用相同的名称,那将非常方便,这样如果strcpy()
存在于用户的libc中,他们可以使用它,但如果它不存在于他们的libc中,则可以尽可能少地更改代码,使用我的版本代替。
简短版:
a)当我编写与内置函数同名的函数时会发生什么?
b)除了费点力气之外,有什么方法可以避免在没有strdup()
的平台上遇到问题,而不必重写所有代码来避免使用strdup()
吗?