Just curious, what actually happens if I define a zero-length array int array[0];
in code? GCC doesn't complain at all.
Sample Program
#include <stdio.h>
int main() {
int arr[0];
return 0;
}
Clarification
I'm actually trying to figure out if zero-length arrays initialised this way, instead of being pointed at like the variable length in Darhazer's comments, are optimised out or not.
This is because I have to release some code out into the wild, so I'm trying to figure out if I have to handle cases where the SIZE
is defined as 0
, which happens in some code with a statically defined int array[SIZE];
I was actually surprised that GCC does not complain, which led to my question. From the answers I've received, I believe the lack of a warning is largely due to supporting old code which has not been updated with the new [] syntax.
Because I was mainly wondering about the error, I am tagging Lundin's answer as correct (Nawaz's was first, but it wasn't as complete) -- the others were pointing out its actual use for tail-padded structures, while relevant, isn't exactly what I was looking for.
-pedantic
isn't the default with g++. So many non-portable extensions... – Dharna[]
in Python or even""
in C? Sometimes, you've got a function or a macro that requires an array, but you don't have any data to put in it. – Haven\0
). In C, there is no situation where you want an actual "zero-sized array" where you could not just pass NULL without all the same caveats. Lundin's answer invoking the standard and Matthieu's answer explaining why it's used sometimes anyway cover the issue in its entirety. – Fsh