Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Yes and no.

No, because ISO never said it must behave this way.

Yes, because every libc I've personally encountered acts this way. At a glance, glibc's x86 implementation[1, 2], musl, and picolibc all handle 0-length memcpy as you'd expect. I'm sure other folks could dig up the code for Newlib, uclibc, and others, and they'd see the same thing.

On a related note, ISO C has THREE different things that most people tend to lump together as "undefined behavior." They are:

Implementation-defined behavior: ISO doesn't require any particular behavior, but they do require implementations to consistently apply a particular behavior, and document that behavior.

Unspecified behavior: ISO doesn't require any particular behavior, but they do require implementations to consistently use a particular behavior, but they don't require that behavior to be documented.

Undefined behavior: ISO doesn't require any particular behavior, and they don't require implementations to define any particular behavior either.

[1]: https://github.com/lattera/glibc/blob/master/string/memcpy.c [2]: https://github.com/lattera/glibc/blob/895ef79e04a953cac14938...



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: