什么是C,Objective-C中的双花括号

时间:2014-05-12 15:18:23

标签: objective-c syntax

参考this source code @autoreleasepool中双花括号的目的是什么?

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        {{
            assert([EnumWith1ConstantSansExplicitValuesByLabel() count] == 1);
            assert([[EnumWith1ConstantSansExplicitValuesByLabel() objectForKey:@"EnumWith1ConstantSansExplicitValues_Constant1"] isEqual:[NSNumber numberWithInt:0]]);

            assert([EnumWith1ConstantSansExplicitValuesByValue() count] == 1);
            assert([[EnumWith1ConstantSansExplicitValuesByValue() objectForKey:[NSNumber numberWithInt:0]] isEqual:@"EnumWith1ConstantSansExplicitValues_Constant1"]);

            EnumWith1ConstantSansExplicitValues a = 0;

            assert(EnumWith1ConstantSansExplicitValues_Constant1 == a);
            assert([@"EnumWith1ConstantSansExplicitValues_Constant1" isEqualToString:EnumWith1ConstantSansExplicitValuesToString(a)]);
            assert(EnumWith1ConstantSansExplicitValuesFromString(EnumWith1ConstantSansExplicitValuesToString(EnumWith1ConstantSansExplicitValues_Constant1), &a));
            assert(EnumWith1ConstantSansExplicitValues_Constant1 == a);

            a++;
            assert([@"<unknown EnumWith1ConstantSansExplicitValues: 1>" isEqualToString:EnumWith1ConstantSansExplicitValuesToString(a)]);
            assert(!EnumWith1ConstantSansExplicitValuesFromString(@"foo", &a));
        }}
        {{
            assert([EnumWith1ConstantSansExplicitValuesTrailingCommaByLabel() count] == 1);
        }}
    ...
    printf("success\n");
    return 0;
}

1 个答案:

答案 0 :(得分:2)

双花括号*没有什么特别之处。它只是被作者用来在一个相当长的方法中逻辑地分离代码段。

*:超出声明范围块的单花括号行为。