IT story

선택 사항이 아닌 경우 C #에 중단이있는 이유는 무엇입니까?

hot-time 2020. 9. 2. 20:42
반응형

선택 사항이 아닌 경우 C #에 중단이있는 이유는 무엇입니까? [복제]


이 질문에 이미 답변이 있습니다.

switchVS2008 C #에서 다음과 같은 성명을 만들 때 (기인) :

switch (state) {
    case '1':
        state = '2';
    case '2':
        state = '1';
}

내가 들르는 것이 허용되지 않는다고 불평합니다.

제어는 한 케이스 레이블 ( 'case'1 '(0x31) :')에서 다른 케이스 레이블로 넘어갈 수 없습니다.

중단 할 수 없다면 break진술 의 목적은 무엇 입니까? 언어 설계자들은 왜 switch우리가 불필요한 구문을 입력하도록 강요 하지 않고 그냥 생략하고 문장 의 끝으로 자동으로 점프하지 않았 습니까?


말의 입에서 (MSDN) C # switch 문이 낙상을 허용하지 않지만 여전히 중단이 필요한 이유는 무엇입니까? .

두드러진 부분을 인용하면 이것이 폴 스루를 허용하지 않는 이유입니다.

이 암시 적 폴 스루 동작은 필요한 코드의 양을 줄이는 데 자주 사용되며 코드를 처음 작성할 때 문제가되지 않는 경우가 많습니다. 그러나 코드가 초기 개발 단계에서 유지 관리 단계로 이동함에 따라 위의 코드는 디버그하기 매우 어려운 미묘한 오류로 이어질 수 있습니다. 이러한 오류는 개발자가 케이스를 추가하는 매우 일반적인 실수로 인해 발생하지만 블록 끝에 휴식을 취하는 것을 잊었습니다.

C #에서 switch 문은 case 끝에 break, goto, return 또는 throw와 같은 명시 적 흐름 제어가 발생하도록 요구합니다. 개발자가 폴 스루 시맨틱을 원하는 경우 case 문 끝에 명시적인 goto를 사용하여 달성 할 수 있습니다.

이것이 자동이 아닌 이유입니다.

케이스 블록의 끝 (대부분 중단)에서 발생하는 명시적인 흐름 제어를 요구하는 C # 규칙의 결과로 많은 사람들이 왜 동작이 단순히 변경되지 않았고 폴스 루가 발생하지 않았는지 의문을 제기합니다. 즉, 중단을 요구하지 말고 단순히 케이스에 대한 폴스 루가 없도록 스위치의 의미를 변경하십시오. 이것이 수행되지 않은 이유는 C ++에 매우 익숙한 개발자가 switch 문이 무엇을하는지 이해하는 데 어려움을 겪지 않기 위해서입니다.


기본적으로 C / C ++ / Java 개발자에게 더 친숙하게 만듭니다. 개인적으로는 실수라고 생각하지만 그게 이유입니다.

강제 차단을 선호했을 것입니다.

case '1':
{
}

다른 것 외에도 스위치 / 케이스에 대한 이상한 변수 범위 지정 상황을 피했을 것입니다. 물론 여러 케이스 레이블을 가질 수 있습니다.

case '0':
case '1':
{
}

여러 사례를 더 간단하게 나열 할 수있는 것도 좋습니다.

case '0', '1':
{
}

아, 그리고 약간의 기존 언어의 당신의 묘사에 대해 니트는-선택 : 당신이하지 않는 휴식을 가질 수 있습니다. 사건의 끝에 도달 할 수 없어야합니다. 당신은 또한 할 수 있습니다 throw, goto또는 return. 내가 놓친 다른 사람도있을 수 있습니다. :)


드롭 스루는 허용되지만 키워드를 사용하여 명시 적으로 수행해야 goto합니다.

switch (state) {
    case '1':
        state = '2';
        goto case '2';
    case '2':
        state = '1';
        break;
}

당신은 할 수 break또는 gotoC #에서,하지만 그 어려운 자리 버그의 잠재적 인 소스이기 때문에 당신이 할 수없는 것은 당신이 원하는 상태는 아니다.

코드 를 추가하는 것을 잊은 것을 발견하는 것보다 goto원할 때 break(또는 그 반대의 경우) 코드가 말하는 것을 발견하는 것이 훨씬 쉽습니다 .

It might sound stupid, but many a tired two-hour search for the cause of a C++ bug ends in a sudden realisation that you forgot to add a break and your code is falling through all the time. C# avoids that by forcing you to state what you want.


If you don't have any code in case 1, you are allowed to fall through, so you can say that "all of these cases share this piece of code"

참고URL : https://stackoverflow.com/questions/3108888/why-does-c-sharp-have-break-if-its-not-optional

반응형