Using memmove when you mean it is certainly clearer to other readers of the code, as well as more correct; on systems without it (and the only even *vaguely* relevant example of one that comes to mind is SunOS 4.0.x! which had an unsafe memcpy but no memmove) you can get away with defining memmove in terms of bcopy. (mmm, feature tests...)