Search code examples
objective-cconstants

Objective-C const NSString * vs NSString * const


I'm trying to a NSString constant in my .h file to be defined in my .m. I understand that
extern NSString * const variableName; in the .h and
NSString * 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?


Solution

  • 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;