I'm trying to a NSString constant in my .h file to be defined in my .m. I understand thatextern NSString * const variableName;
in the .h andNSString * const variableName = @"variableValue";
is the way to do this. Examining c tutorials I see that const
is supposed to go before variable definitions. My question is why is it not declared as extern const NSString * variableName;
in the .h and const NSString * variableName = @"variableValue";
in the .m. I know this doesn't work because I encounter compiler warnings which say 'Passing argument 1 of methodName: discards qualifiers from pointer target type'. What does this mean?
It's not the same. The const modifier can be applied to the value, or the pointer to the value.
int * const
A constant pointer (not modifiable) to an integer (its value can be modified)
const int *
A modifiable pointer to a constant integer (its value can't be modified)
So you can imagine:
const int * const;
Constant pointer is NOT a pointer to constant. Constant pointer means the pointer is constant. E.g. constant pointer int * const ptr2;
indicates that ptr2
is a pointer which is constant. This means that ptr2
cannot be made to point to another integer. However, the integer pointed by ptr2
can be changed.
Whereas a pointer to constant const int * ptr1;
indicates that ptr1
is a pointer that points to a constant integer. The integer is constant and cannot be changed. However, the pointer ptr1
can be made to point to some other integer.
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