2013-08-13 2 views
2

현재 Xcode로 작성중인 C 프로그램이 있습니다. 엑스 코드는 C가 사용될 때마다 변수 C가 정의되어 있지 불평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에서 "보이지 않는 부분 보이기"를 시도해 보았습니다. clang 또는 gcc로 프로그램을 수동으로 컴파일하면 같은 오류 메시지가 나타납니다. 어느 흥미

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; 

때문에 아무것도 다음과 같이 전처리 단계 이후에 상기 코드의 일부가 보이는

(연타 -E 수득).

아이디어가 있으십니까? 나는 23 년 전에 나의 마지막 C 프로그램을 썼다. 그래서 나는 뭔가를 놓쳤을지도 모른다. ...

+2

'case'L ': {...}' – bdesham

+0

@bdesham과 같이 대괄호로 전체 사례를 래핑 해보세요. 작동합니다. 정말 고마워요! – uselpa

답변

10

당신은 그 케이스를 중괄호로 묶을 필요가있다. C에서는 변수 초기화가있는 경우 스위치 케이스를 중괄호로 묶어야합니다. 다음과 같이이 있어야한다 : 당신이 swith를-케이스 내부 변수를 선언하는 컴파일러가 허용 할 수

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

있지만, 그렇게 할 수있는 좋은 생각이 아니다. 이 경우를 도우미 함수로 바꿀 수 있습니다.

낮은 수준의 설명은 this을 참조하십시오.

+0

재미있는 점은, 꽤 많은 시간 동안 중괄호없이 작동했지만, 일부 편집 후에는 불평하기 시작했습니다. – uselpa

+0

@uselpa, strange - 처음부터 제대로 작동하지 않아야합니다. –