iosobjective-cllvmliteralsllvm-4.0

Literal @YES not working in iOS 5 / Xcode 4.4


New Xcode 4.4 is out and it should support literals like

@42
@"String"
@23.0L
@{ @"key" : obj } and
@[obj1, obj2]

and it should also support @YES and @NO, which isn't working when targeting latest iOS 5 (and prior). After compiling it show the error message:

Unexpected type name 'BOOL': expected expression

I know you can fix it by typing @(YES) and @(NO). But I want to know the reason why it isn't working as expected.


Solution

  • The reason is Apple forgot the parentheses here:

    #define YES             (BOOL)1
    

    This will be fixed in iOS 6 SDK:

    #define YES             ((BOOL)1)
    

    In the meantime you must type @(YES).