如果我在我的代码是这样的:相同地址的C结构赋值有效吗?
void f(struct foo *x, struct foo *y)
{
*x = *y; // structure copy (memcpy?)
}
如果x和y指向同一个地址,会发生什么?
这是有效的代码,以及如果编译器将赋值转换为具有潜在无效操作数的memcpy调用(它们不允许重叠),该怎么办?
[是的,我知道在这种情况下我可以使用“restrict”,但是我们发现的实际代码是由bison自动生成的,所以我们想知道它是否应该始终有效,编译器应该使用memmove或其他允许重叠的东西..]
有没有必要做一个检查。 – 2011-01-19 12:28:52
downvote,誓言。 – 2011-01-19 12:54:56