C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 FAQ
C++Builder Programming FAQ
[151] cannot compile this 'this' captured by SEH yet 오류 현상
김시환 [godson2] 3682 읽음    2020-05-29 17:25
C++ builder Rio 10.3.3 버젼 사용중에 생긴 문제 입니다.

프로그램 작성중에 갑자기 처음보는 에러가 (cannot compile this 'this' captured by SEH yet) 나왔습니다.
해당 에러가 난 곳에서 아무리 찾아봐도 구문상 문제가 없는데 오류가 사라지지 않아서 인터넷을 찾아 보았습니다.

찾아보니 CLang의 32bit 컴파일러 오류현상 이라고 나오고 엠바에서 이미 10.3.1 버젼에서 해당 오류를
수정했다고 나오네요..

그런데  난 10.3.3 버젼을 사용하고 있는데 왜?????

좀더 내용을 살펴보니 try __finally 문의 사용과 관련이 있다고 나와서 try __finally 을 빼버릴까 하다고 오기로 오류를 잡아 보기로 맘 먹고 이것 저것 수정해 보았습니다.

그러던 중 아래의 소스 구조상에서 __finally 구문안에 for 반복문이 있었습니다.
이것을 반복문을 사용하지 않고 그냥 순차적으로 실행하도록 고쳤더니 해당 오류 현상이 사라졌습니다.

그래서 혹시 이것이 __finally 구문안에 for 문이 있으면 늘 생기는 오류인가 테스트 해 보았는데 그게 꼭 원인은 아니더군요..
패치를 하면서 해당오류를 수정했다고 하던데 도대체 뭘 고친건지 모르겠습니다. 하여간 원인도 모르는 오류 수정기였습니다.


  try
  {
  }
  __finally
  {
      for(int loop=0 ; loop<2 ; loop ++)
      {
      }
  }
빌더(TWx) [builder]   2020-06-06 15:30 X
C++은 RAII 를 지원하므로 __finally가 있을 필요가 없어요.

엠바 C++ 컴파일러에서 __finally는...
class 객체를 수동으로 힙에 생성하고 해제해야만 하는 델파이 파스칼 컴파일러의 한계로 인해
객제의 안전한 해제를 위해선 try... finally 블럭이 필요할 수 밖에 없는 VCL의 구조적 한계를
그대로 답습한 산물에 불과함.
빌더(TWx) [builder]   2020-06-06 15:35 X
'this' captured by SEH yet 의 의미는...

엠바에서 clang 컴파일러를 엉터리로 포팅해서 만들어 놓았기 때문에

__finally 블럭 안에서 for() 블럭이 중첩되어 있을 때...
for() 블럭 안에서 클래스 멤버의 this 를 참조하지 못한다는 의미 임.

해결하는 방법은...
try{} 블럭 밖에서 this를 캡쳐하도록 람다를 정의해서
__finally 블럭 안의 중첩된 for() 블럭 안에서 호출해서 사용하면 됨.

+ -

관련 글 리스트
151 cannot compile this 'this' captured by SEH yet 오류 현상 김시환 3682 2020/05/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.