我最近意识到strdup()
我在 OS X 上经常使用的函数不是 ANSI C 的一部分,而是 POSIX 的一部分。我不想重写所有代码,所以我想我会编写自己的代码strdup()
功能。其实这并不难,只是一个malloc()
and a 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)