I want to create a constant static array to be used throughout my Objective-C implementation file similar to something like this at the top level of my ".m" file:
static const int NUM_TYPES = 4;
static int types[NUM_TYPES] = {
1,
2,
3,
4 };
I plan on using NUM_TYPES
later on in the file so I wanted to put it in a variable.
However, when I do this, I get the error
"Variably modified 'types' at file scope"
I gather that this may have something to do with the array size being a variable (I don't get this message when I put an integer literal there, like static int types[4]
).
I want to fix this, but maybe I am going about it all wrong...I have 2 goals here:
NUM_TYPES
into a variable so I don't have the same literal scattered about different places in my fileAny suggestions?
[EDIT] Found this in the C Faq: http://c-faq.com/ansi/constasconst.html
The reason for this warning is that const in c doesn't mean constant. It means "read only". So the value is stored at a memory address and could potentially be changed by machine code.
If you're going to use the preprocessor anyway, as per the other answers, then you can make the compiler determine the value of NUM_TYPES
automagically:
#define NUM_TYPES (sizeof types / sizeof types[0])
static int types[] = {
1,
2,
3,
4 };
#define NUM_TYPES 4
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With