Hacker News new | past | comments | ask | show | jobs | submit login

I mean, they might not have given thought to that particular corner case, they probably wrote something like

> memcpy(void* ptr1, void* ptr2, int n)

Copy n bytes from ptr1 to ptr2. UNDEFINED if ptr1 is NULL or ptr2 is NULL

‐------

It might also have come from a "explicit better than implicit" opinion, as in "it is better to have developers explicitly handle cases where the null pointer is involved




I think it's more a strategy. C was not created to be safe. It's pretty much a tiny wrapper around assembler. Every limitation requires extra cycles, compile time or runtime, both of which were scarce.

Of course, someone needs to check in the layers of abstraction. The user, programmer, compiler, cpu, architecture.. They chose for the programmer, who like to call themselves "engineers" these days.


I disagree with your premise. C was designed to be a high level (for its time) language, abstracted from actual hardware

>It's pretty much a tiny wrapper around assembler

Assebler has zero problem with adding "null + 4" or computing "null-null". C does, because it's not actually a tiny wrapper.


Not high-level.. Portable. Portable layer above assembler/arch.

NULL doesn't exist in assembler, and in C, NULL is only a defined as a macro. It's not something built-in.

C doesn't have any problems adding 4 to NULL nor subtracting NULL from NULL.


> C doesn't have any problems adding 4 to NULL nor subtracting NULL from NULL.

"Having problems" is not a fair description of what's at stake here. The C standard simply says that it doesn't guarantee that such operations give the results that you expect.

Also please note that the article and this whole thread is about the address zero, not about the number zero. If NULL is #defined as 0 in your implementation and you use it in an expression only involving integers, of course no UB is triggered.


  #include <stddef.h>
  int main() {
    if (NULL + 4) {}
    if (NULL - NULL) {}
    return 0;
  }


Not sure what your last remark means wrt everything else.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

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

Search: