如果我的代码中有这样的内容:
void f(struct foo *x, struct foo *y)
{
*x = *y; // structure copy (memcpy?)
}
如果 x 和 y 指向同一个地址,会发生什么?
这是有效的代码吗?如果编译器将赋值转换为带有潜在无效操作数的 memcpy 调用(它们不允许重叠)怎么办?
[是的,我知道在这种情况下我可以使用“限制”,但是我们发现的实际代码让我们认为这是由野牛自动生成的,所以我们想知道它是否应该始终有效以及编译器是否应该使用 memmove 或其他允许重叠的东西..]