Hello,
I want to use the #error directive to limit the size of a statically allocated array during compilation (it must not exceed a certain limit, and I want to fail compilation, not startup, if it is too large), but I can only work with constant expressions, of course. Is there a way to do this...?
Thanks.
how do you have an array that is larger (the number of elements) than "the amount of RAM the array consumes"
That's an interesting combination of words you've posted there. Is it some sort of answer to the OP's question?
What he means is that he wants to constrain the size (number of elements) of the array by specifically limiting the amount of RAM that it is allowed to occupy.
Yes, I know that is what the OP means, what I was trying to establish is what the curious jumble of words posted by you know who was all about?
Maybe something like this is what you want:
... some declaration of my_array ... #define MAX_SIZE 5000 /* bytes, for example */ typedef int dummy[sizeof(my_array) <= MAX_SIZE ? 1 : -1];
If the size of the array is small enough this will create a legal typedef named dummy that we don't actually use.
If the size is too big then the typedef is illegal an the compiler should give an error.
Some compilers/mode allow zero length arrays, but I haven't met one that allows -1 length arrays.