2013-08-13 3 views
2

Я застрял в программе на C, которую я сейчас пишу в Xcode. После того, как работал над ним в течение нескольких часов, Xcode вдруг начал жаловаться с сообщением «ожидаемое выражение»:Xcode 4.6.3 «ожидаемое выражение»

switch(cmd) { 

    case 'S': 
     state = sstart; 
     accpos = accmax = varnum = 0; 
     inquote = inddstar = false; 
     break; 

    case 'L': 
     char c; // *** expected expression 
     int i = 0; 
     bool processed; 

     while((c = buff[i++]) != '\0') { 
     acc[accmax++] = c; 

После чего Xcode жалуется, что переменная с не определена, когда используется с.

Я пробовал «показывать невидимые» в Xcode безрезультатно. Компиляция программы вручную с помощью clang или gcc дает такое же сообщение об ошибке.

После стадии препроцессора, эта часть кода выглядит следующим образом (полученный с лязгом -E):

switch(cmd) { 

    case 'S': 
     state = sstart; 
     accpos = accmax = varnum = 0; 
     inquote = inddstar = 0; 
     break; 

    case 'L': 
     char c; 
     int i = 0; 
     _Bool processed; 

     while((c = buff[i++]) != '\0') { 
     acc[accmax++] = c; 

так ничего интересного ни.

Любые идеи? Я написал свою последнюю программу C 23 года назад, чтобы я мог что-то пропустить ...

+2

Попробуйте обернуть весь корпус в скобках, например 'case 'L': {...}' – bdesham

+0

@bdesham Это работает - большое вам спасибо! – uselpa

ответ

10

Вам нужно было бы приложить этот случай в фигурных скобках. В C вы должны заключить в скобки в случае, если существует переменная инициализация. Оно должно быть следующим:

case 'L': { 
    // ... your code. 
    break; 
} 

Даже если ваш компилятор может позволить вам объявлять переменные внутри выключтель-случае, это не очень хорошая идея, чтобы сделать это. Вероятно, вы можете заменить этот случай вспомогательной функцией.

См. this для более низкого уровня.

+0

Забавно, что он работал без брекетов в течение некоторого времени, но после некоторого редактирования он начал жаловаться. – uselpa

+0

@uselpa, странно - он не должен работать с самого начала. –

Смежные вопросы