Can I declare variables inside an Objective-C switch statement? Can I declare variables inside an Objective-C switch statement? objective-c objective-c

Can I declare variables inside an Objective-C switch statement?


I don't have a suitable Objective-C compiler on hand, but as long as the C constructs are identical:

switch { … } gives you one block-level scope, not one for each case. Declaring a variable anywhere other than the beginning of the scope is illegal, and inside a switch is especially dangerous because its initialization may be jumped over.

Do either of the following resolve the issue?

NSString *viewDataKey;switch (cellNumber) {    case 1:        viewDataKey = @"Name";    …}switch (cellNumber) {    case 1: {        NSString *viewDataKey = @"Name";        …    }    …}


You can't declare a variable at the beginning of a case statement. Make a test case that just consists of that and you'll get the same error.

It doesn't have to do with variables being declared in the middle of a block — even adopting a standard that allows that won't make GCC accept a declaration at the beginning of a case statement. It appears that GCC views the case label as part of the line and thus won't allow a declaration there.

A simple workaround is just to put a semicolon at the beginning of the case so the declaration is not at the start.


In C you only can declare variables at the begining of a block before any non-declare statements.

{   /* you can declare variables here */   /* block statements */   /* You can't declare variables here */}

In C++ you can declare variables any where you need them.