没有任何理由使用非标bzero()和bcopy()替代memset(),并memcpy()在Linux环境?我听说很多人说他们对Linux编译器更好,但是没有看到任何优于标准功能的优势.
它们是否比标准的更优化,或者它们是否具有任何行为特异性?
pax*_*blo 51
虽然bzero和bcopy函数不是ISO C(我假设您在将它们称为非标准时所称的实际标准),但它们是 POSIX标准的东西,尽管它们都预先标准化了ISO 和 POSIX.
并注意用字的"人" -这些功能是在POSIX.1-2001弃用,fianally 除去在POSIX.1-2008,在尊重memset,memcpy和memmove.所以你最好尽可能使用标准的C函数.
如果你有很多使用它们的代码,并且你不想去改变它们(虽然你可能应该在某些时候),你可以使用以下快速替换:
// void bzero(void *s, size_t n);
#define bzero(s, n) memset((s), 0, (n))
// void bcopy(const void *s1, void *s2, size_t n);
#define bcopy(s1, s2, n) memmove((s2), (s1), (n))