2010-04-07 6 views
5

다소 긴 switch-case 문이 있습니다. 이 중 일부는 매우 짧고 사소합니다. 약간은 다음과 같이 이상하고 다른 곳에서는 사용되지 않는 몇 가지 변수가 필요합니다switch 구문의 경우 로컬 블록에 변수를 정의하는 것이 좋은 생각입니까?

int specialVariable = 5; 
switch (action) { 
    case kSimpleAction: 
     // Do something simple 
     break; 
    case kComplexAction: 
     // Do something complex with specialVariable 
     break; 
} 

이 수 :

switch (action) { 
    case kSimpleAction: 
     // Do something simple 
     break; 
    case kComplexAction: { 
     int specialVariable = 5; 
     // Do something complex with specialVariable 
     } break; 
} 

이 대안이 같은 switch에 가기 전에 그 변수를 선언하는 것 변수가 속해 있고 불필요한 메모리를 사용하고있는 것이 확실하지 않으므로 다소 혼란스러워집니다.

그러나이 사용법은 다른 어느 곳에서도 본 적이 없습니다.
단일 블록 case에 대해 변수를 블록에 로컬로 선언하는 것이 좋습니다.

답변

11

스위치 블록 뒤에 specialVariable을 사용하지 않는 경우 "case"블록에 선언하십시오.

일반적으로 변수는 가능한 가장 작은 범위에서 선언되어야합니다.

+0

각각의 경우 범위입니까? 나는 그 사건 자체가 스위치없이 의미가 없기 때문에 묻는다. – gbn

+4

@gbn - 자체적으로'case'는 새로운 범위를 만들지 않습니다.이 코드는 새로운 범위를 도입하기 위해'{}'을 추가해야합니다 (OP가 그의 첫 번째 예에서와 같이). –

+0

예, 케이스 (말장난)에서 변수를 사용하려는 경우 "범위"를 만들어야합니다.이 경우 변수는이 경우에만 사용됩니다. – Max

3

예 필요한 가장 좁은 범위에서 변수를 정의하십시오.

따라서 예 1이 바람직합니다.

1

가능한 한 가능한 한 작은 가능한 범위에서 동의하십시오. 그렇게하면 다음 사람이 업데이트해야 할 때 변수가 switch 문의 다른 섹션에서 사용되는지 걱정할 필요가 없습니다.

3

switch 문이 관리하기 어려울 정도로 커지면 함수 포인터 테이블로 변환 할 수 있습니다. 별도의 함수로 각 사례의 코드를 작성함으로써 변수 선언 및 정의에 대해 걱정할 필요가 없습니다.

또 다른 장점은 각각 case 기능을 번역 단위에 넣을 수 있다는 것입니다. 이렇게하면 변경된 case 만 컴파일하여 빌드 프로세스 속도를 높일 수 있습니다. 또한 가장 작은 범위의 변경 사항을 격리하여 품질을 향상시킵니다.

1

switch 명령문에 대한 내 자신의 규칙은 각 사례 안에 break를 제외하고 최대 하나의 명령문이 있어야한다는 것입니다. 즉, 명령문이 초기화, 할당 또는 함수 호출 중 하나임을 의미합니다. 케이스에 더 복잡한 코드를 넣는 것이 재앙의 방법입니다. 윈도우 프로 시저의 경우와 동일한 방법으로 메시지 매개 변수를 처리 한 필자가 보았던 모든 Windows 코드 (Petzold에서 영감을 얻은)를 "좋아"기억합니다.

그래서 함수를 호출하고 거기에 변수를 넣으십시오! 거기에서 물건을 다음만큼 이동하는 것을 고려 스위치/경우와 전체 스위치/경우를 볼 수있는 능력의 길을 점점 너무 복잡 얻고 시작하면

2

나는

case X: 
    { 
     type var; 
     ...; 
    } 
    break; // I like to keep breaks outside of the blocks if I can 

에 대한 모든이야 case 코드에 의해 호출되는 하나 또는 두 개의 인라인 함수를 사용할 수 있습니다. 이렇게하면 함수 호출 오버 헤드가 발생하지 않고 가독성을 향상시킬 수 있습니다.

관련 문제