我在wikibooks.org上查看公共领域的实现。它实现 memmove() 如下明确声明它“不是完全可移植的”!我想知道为什么:
- 括号放在代码的第一行,并且
- 代码不是完全可移植的。
代码如下:
void *(memmove)(void *s1, const void *s2, size_t n)
{
char *p1 = s1;
const char *p2 = s2;
if (p2 < p1 && p1 < p2 + n) {
/* do a descending copy */
p2 += n;
p1 += n;
while (n-- != 0)
*--p1 = *--p2;
} else
while (n-- != 0)
*p1++ = *p2++;
return s1;
}