Hacker News new | ask | show | jobs
by ollien 1115 days ago
> The issue with 1 is that it only works until you pass an array into a function by pointer, then the macro no longer works. GCC even has a warning for this.

Even worse, even if you specify the argument to be "of the type" array, it will actually still decay to a pointer. Basically, this macro will only work if you use it in the same function the array is defined.

https://godbolt.org/z/vr4za73qq

2 comments

You need to pass a pointer to an array: https://godbolt.org/z/jYzY79ac4

When passing an array it decays into a pointer and the size is lost. We can also change sizeof to recover it, but there was a proposal for a _Lengthof operator which could work here.

One exception is if you explicitly define argument as array of fixed length.

Downside being, obviously, that it will only work with arrays of that particular length.