이 코드는 왜 3인가요? i가 처음 1일 때 default: c+=i; 가 사용되고, 두 번째로 i가 2일 때 case 2: c++;break; 가 사용되는 경우가 아닌가요? c=2 가 마지막에 출력되나요? 왜 3인가요?
女神的闺蜜爱上我2017-07-06 10:37:10
우선 스위치에서 주의해야 할 몇 가지 사항을 명확히 하겠습니다.
switch
语句体由一系列 case
标签和一个可选 default
标签组成。 case
语句中的两个常量表达式的计算结果不能为同一个值。 default
标签只能出现一次。 标记语句不是语法要求,但如果它们不存在,switch
语句是无意义的。默认语句(即default
标签)无需显示在末尾;它可以显示在 switch 语句体的任何位置。 case
或 default
标签只能显示在 switch
성명서 내.
발췌: Microsoft Visual Studio 2015 c++ Switch 문 공식 문서
위에 언급된 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를 실행합니다.
문이 튀어나왔습니다.
for
루프에서 벗어나 c=3을 출력합니다. 🎜🎜 (위 프로세스는 제가 Visual Studio 2015 단일 단계 디버깅을 사용하여 도출한 결론입니다. 및 데이터 결합) 🎜 🎜三叔2017-07-06 10:37:10
i=1이면 기본값: c=1이고 break가 없으므로 계속해서 Case 2를 일치시켜 c=2 break를 얻습니다.
i=2일 경우 Case 2를 먼저 일치시키고 Case 2로 들어갑니다: c=3 break
i=3이면 주기가 유지되지 않습니다.
출력 c는 3