프로그래밍C 개발자

C 언어의 반복 구조에서 break 및 continue 연산자의 작동 메커니즘을 설명하십시오. 그들의 의미적 차이, 사용의 숨겨진 특성과 프로그램 논리에 영향을 미치는 nuances는 무엇입니까?

Hintsage AI 어시스턴트로 면접 통과

답변.

연산자 breakcontinue는 반복 구조(for, while, do..while)에서 실행 흐름을 제어하는 데 사용됩니다.

  • break — 현재 반복을 즉시 중단하고 반복 후의 명령어로 제어를 전달합니다.
  • continue — 현재 반복을 종료하고 다음 반복으로 넘어가며 현재 반복의 나머지 몸체를 건너뜁니다.

세부 사항:

  • 중첩 루프 내부에서 break를 사용하면 가장 내부 루프만 종료됩니다.
  • 레이블(label)과 goto와 결합하여 복잡하게 논리에 영향을 줄 수 있습니다.
  • whiledo..while 루프에서 continue를 사용하면 동작 순서를 고려하지 않으면 예기치 않은 제어 흐름 이동이 발생할 수 있습니다.

예:

for (int i = 0; i < 5; ++i) { if (i == 2) continue; if (i == 4) break; printf("%d ", i); } // 출력: 0 1 3

속임수 질문.

복잡한 표현식을 사용하여 카운터를 초기화하고 업데이트하는 경우, continue 연산자가 있는 루프는 어떻게 작동합니까?

흔한 잘못된 대답: 많은 사람들이 continue가 발생할 때 루프 구조 내의 모든 표현식(예: for의 증가)이 실행되지 않는다고 생각합니다.

정답:

for 루프에서 continue에 도달하면 루프의 나머지 부분이 건너뛰어지지만 카운터 업데이트 표현식(for의 세 번째 부분)은 여전히 실행됩니다:

for (int i = 0; i < 3; printf("step %d ", i), ++i) { if (i == 1) continue; printf("%d ", i); }

출력:

0
step 0
step 1
2
step 2

주제의 미세한 차이를 몰라서 발생하는 실제 오류의 예.


이야기

배열을 반복하는 루프 내에서 continue를 사용하면서도 카운터 매개변수를 명시적으로 업데이트하는 것을 잊어버려 무한 루프가 발생했습니다.


이야기

일치 항목을 찾는 중첩 루프에서 첫 번째 일치 항목에 대해 break가 실행되었지만 프로그래머는 루프가 완전히 중단될 것으로 예상했으며 결과적으로 나머지 요소에 대한 처리가 제대로 수행되지 않았습니다.


이야기

do..while 구조에서 주요 루프가 continue를 사용하여 다음 반복으로 넘어가기 전에 핵심 종료 작업이 건너뛰어져 루프 내부 상태의 잘못된 변경으로 인해 데이터 손실이 발생했습니다.