switch 语句体由一系列 case 标签和一个可选 default 标签组成。 case 语句中的两个常量表达式的计算结果不能为同一个值。 default 标签只能出现一次。 标记语句不是语法要求,但如果它们不存在,switch 语句是无意义的。默认语句(即default标签)无需显示在末尾;它可以显示在 switch 语句体的任何位置。 case 或 default 标签只能显示在 switch 성명서 내. 발췌: Microsoft Visual Studio 2015 c++ Switch 문 공식 문서
2.
위에 언급된 case和default本身就是标签,就是告诉编译器从满足这个标签开始向后执行,之后不会再判断其他标签的正确性,直到break语句或者switch 문의 범위는 끝납니다.
이 문제에 대해서는
1단계 : i=1일 때 i!=2&&i!=4이므로 default 태그 이후에 실행이 시작됩니다. c+=i; 명령문 실행(이제 컴파일러가 c를 0으로 초기화한다고 가정합니다. 모든 컴파일러가 그렇게 친숙하지는 않다는 것을 알아야 합니다) 실행 후 c의 값은 1입니다. STEP 2i=1时,由于i!=2&&i!=4故从default标签后开始执行,此时执行语句c+=i;(我们现在就假设编译器帮你把c初始化为0,要知道并不是所有的编译器都这么友好)执行后c的值为1; STEP 2:综合上述1,2可知由于此时没有碰到任何break语句也没有到switch语句的作用域结束(因为这个default语句是放在第一个的)所以它接着向后执行case 2后的语句(此时编译器已经不看满不满足case标签了)此时执行语句c++;执行后c的值为2;遇到break语句跳出switch语句。 STEP 3:当i=2时,由于i满足case 2的情况,所以直接从case 2便签后的语句开始执行,此时执行语句c++,执行后c的值为3,遇到break语句跳出switch语句。 STEP 4:当i=3时,跳出for: 위 1, 2를 토대로 현재는 break 문이 발견되지 않았고 switch 문의 범위가 종료되지 않았음을 알 수 있습니다. (이 기본값 때문에 문이 먼저 배치되므로 case 2 이후의 문을 거꾸로 실행합니다(이때 컴파일러는 를 충족하지 않았습니다). case Label) 이때 c++ 문이 실행되며, break 문을 만나면 실행 후 c의 값은 2입니다. >switch 문이 튀어나왔습니다. STEP 3: i=2일 때 i는 case 2의 상황을 만족하므로 case 2 뒤의 문장을 바로 따라갑니다. note 실행을 시작합니다. 이때 c++ 문이 실행됩니다. 실행 후 c의 값은 3입니다. break 문을 만나면 switch를 실행합니다. 문이 튀어나왔습니다.
🎜STEP 4🎜: i=3일 때 for 루프에서 벗어나 c=3을 출력합니다. 🎜🎜 (위 프로세스는 제가 Visual Studio 2015 단일 단계 디버깅을 사용하여 도출한 결론입니다. 및 데이터 결합) 🎜 🎜
우선 스위치에서 주의해야 할 몇 가지 사항을 명확히 하겠습니다.
1.
switch
语句体由一系列case
标签和一个可选default
标签组成。case
语句中的两个常量表达式的计算结果不能为同一个值。default
标签只能出现一次。 标记语句不是语法要求,但如果它们不存在,switch
语句是无意义的。默认语句(即default
标签)无需显示在末尾;它可以显示在 switch 语句体的任何位置。case
或default
标签只能显示在switch
성명서 내.발췌: Microsoft Visual Studio 2015 c++ Switch 문 공식 문서
2.
위에 언급된
case
和default
本身就是标签,就是告诉编译器从满足这个标签开始向后执行,之后不会再判断其他标签的正确性,直到break
语句或者switch
문의 범위는 끝납니다.이 문제에 대해서는
1단계 :
🎜STEP 4🎜: i=3일 때i=1
일 때i!=2&&i!=4
이므로default
태그 이후에 실행이 시작됩니다.c+=i;
명령문 실행(이제 컴파일러가 c를 0으로 초기화한다고 가정합니다. 모든 컴파일러가 그렇게 친숙하지는 않다는 것을 알아야 합니다) 실행 후 c의 값은 1입니다. STEP 2i=1
时,由于i!=2&&i!=4
故从default
标签后开始执行,此时执行语句c+=i;
(我们现在就假设编译器帮你把c初始化为0,要知道并不是所有的编译器都这么友好)执行后c的值为1;STEP 2:综合上述1,2可知由于此时没有碰到任何
break
语句也没有到switch
语句的作用域结束(因为这个default
语句是放在第一个的)所以它接着向后执行case 2
后的语句(此时编译器已经不看满不满足case
标签了)此时执行语句c++
;执行后c的值为2;遇到break
语句跳出switch
语句。STEP 3:当
i=2
时,由于i满足case 2
的情况,所以直接从case 2
便签后的语句开始执行,此时执行语句c++
,执行后c的值为3,遇到break
语句跳出switch
语句。STEP 4:当i=3时,跳出
for
: 위 1, 2를 토대로 현재는break
문이 발견되지 않았고switch
문의 범위가 종료되지 않았음을 알 수 있습니다. (이기본값 때문에
문이 먼저 배치되므로case 2
이후의 문을 거꾸로 실행합니다(이때 컴파일러는를 충족하지 않았습니다). case
Label) 이때c++
문이 실행되며,break
문을 만나면 실행 후 c의 값은 2입니다. >switch 문이 튀어나왔습니다.STEP 3:
i=2
일 때 i는case 2
의 상황을 만족하므로case 2
뒤의 문장을 바로 따라갑니다. note 실행을 시작합니다. 이때c++
문이 실행됩니다. 실행 후 c의 값은 3입니다.break
문을 만나면switch를 실행합니다.
문이 튀어나왔습니다.for
루프에서 벗어나 c=3을 출력합니다. 🎜🎜 (위 프로세스는 제가 Visual Studio 2015 단일 단계 디버깅을 사용하여 도출한 결론입니다. 및 데이터 결합) 🎜 🎜i=1이면 기본값: c=1이고 break가 없으므로 계속해서 Case 2를 일치시켜 c=2 break를 얻습니다.
i=2일 경우 Case 2를 먼저 일치시키고 Case 2로 들어갑니다: c=3 break
i=3이면 주기가 유지되지 않습니다.
출력 c는 3
으아악