컴파일러 경고(수준 1) C4532
'continue': 종료 처리 중 정의되지 않은 동작이 있는 __finally/finally 블록에서 점프
설명
컴파일러에서 다음 키워드 중 하나를 발견했습니다.
비정상적인 종료 중 또는 finally
블록에서 __finally
점프를 발생시키는 경우
예외가 발생하고 종료 처리기를 실행하는 동안 스택이 해제되고(__finally
또는 마지막으로 차단) 블록이 종료되기 전에 __finally
코드가 블록 밖으로 __finally
이동하면 동작이 정의되지 않습니다. 컨트롤이 해제 코드로 반환되지 않을 수 있으므로 예외가 제대로 처리되지 않을 수 있습니다.
블록 밖으로 __finally
이동해야 하는 경우 먼저 비정상적인 종료를 확인합니다.
/sdl
(추가 보안 검사 사용) 컴파일러 옵션은 이 경고를 오류로 승격합니다.
예시
다음 샘플에서는 C4532를 생성합니다. 점프 문을 삭제하거나 주석 처리하여 경고를 해결합니다.
// C4532.cpp
// compile with: /W1
// C4532 expected
int main() {
int i;
for (i = 0; i < 10; i++) {
__try {
} __finally {
// Delete the following line to resolve.
continue;
}
__try {
} __finally {
// Delete the following line to resolve.
break;
}
}
}