我最近意识到我在 OS X 上经常使用的 strdup()
函数不是 ANSI C 的一部分,而是 POSIX 的一部分。我不想重写我所有的代码,所以我想我只是要编写我自己的 strdup()
函数。这并不难,真的,它只是一个 malloc()
和一个 strcpy()
。无论如何,我有这个函数,但是如果我编写这个函数并将它链接到我的代码,并且它已经存在于 libc 中,我在做什么?我的链接器或编译器是否允许我基本上定义我自己的函数版本,还是我必须给它另一个名字?如果有一种方法可以重用相同的名称,那将非常方便,这样如果 strcpy()
存在于用户的 libc 中,他们就可以使用它,但如果它不存在于他们的 libc 中,他们可以改用我的版本,尽可能少地更改代码。
简短版本:
a) 当我自己编写与内置函数同名的函数时会发生什么?
b) 我可以做些什么来避免在没有 strdup()
的平台上发生不好的事情,而无需重写我的所有代码以不使用 strdup()
,这有点乏味?
最佳答案
通常,在某个编译器下,您只需使用#if
来定义您想要的函数。如果内置库没有定义strdup,你自己定义也没有问题(除非以后他们定义了,你就得把它拿出来。)
// Only define strdup for platforms that are missing it..
#if COMPILER_XYZ || COMPILER_ABC
char *strdup(const char *)
{
// ....
}
#endif
关于c - strdup() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/482375/