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

델파이 팁&트릭
Delphi Programming Tip&Tricks
[217] 컴파일러 경고: Unsafe typecast, Unsafe code, Unsafe type
박지훈.임프 [cbuilder] 5748 읽음    2007-07-05 22:30
델파이 7 이상(7, 2005, 2006, 2007)을 사용하다보면, 기존의 6 이하 버전에서는 없었던 경고들이 나타나는 것을 볼 수 있습니다.

[Warning] Unsafe type '...'
[Warning] Unsafe code '...'
[Warning] Unsafe typecast of '...' to '...'

이 경고들은 델파이가 닷넷과 호환 기능을 가지게 되면서 추가된 경고들입니다. 7 버전부터 닷넷을 고려하기 시작했고 (8 버전은 닷넷 전용 버전이며) 2005부터는 닷넷과 Win32를 동시에 지원하게 되었는데요. 향후에 이 Win32용 소스를 닷넷으로 마이그레이션할 경우에는 이 코드가 문제가 될 수 있다는 것을 미리 알려주는 것입니다.

예를 들면, GetMem()과 같은 함수, @ 연산자, Pointer 타입 등이 이런 경고들을 일으킵니다.

귀찮은 거 딱 질색인 스타일이시라면, 아예 프로젝트 옵션 설정에서 이 경고들이 나타나지 않도록 죽여버리면 됩니다. 프로젝트 옵션 다이얼로그 -> Compiler Messages로 들어가시면 오른쪽에 경고 리스트가 나오는데, 여기서 Unsafe type, Unsafe code, Unsafe typecast의 체크를 빼버리면 됩니다.

이 프로젝트 옵션 설정 방법은 프로젝트 단위로 지정되므로, 그 프로젝트에 포함된 소스 일부가 다른 프로젝트에 그대로 사용된다면(특히 컴포넌트 소스라면) 당근 적용되지 않습니다.

다른 방법으로는, 컴파일러 디렉티브(지시자)를 이용해서 소스 단위 혹은 코드 부분마다 세밀하게 지정할 수 있습니다. 해당 소스 전체를 이런 경고들로부터 해방시키려면 소스 가장 위에 아래의 세줄을 그대로 복사해넣으면 됩니다.

{$WARN UNSAFE_TYPE OFF}
{$WARN UNSAFE_CODE OFF}
{$WARN UNSAFE_CAST OFF}

좀 더 세밀하게 컨트롤하고 싶다면, 소스를 통째로 지정하기 보다는 정확히 해당 코드 앞뒤로 OFF, ON을 해주면 되겠지요. 예를 들면 다음과 같이 말이죠.
{$WARN UNSAFE_CODE OFF}
    GetMem(...);
{$WARN UNSAFE_CODE ON}

실제로 닷넷용으로 컴파일할 때 이 경고들이 어떤 역할을 하는지 보시려면 다음 글을 참고하세요.

델파이 VCL 애플리케이션의 VCL.NET 마이그레이션
http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_tutorial&no=113

동일한 위의 글을 코드기어 DN에도 올렸습니다.
http://dn.codegear.com/article/33968

그럼...
늙고무식한넘 [bosungsoft]   2007-08-11 00:40 X
아주 감사합니다

+ -

관련 글 리스트
217 컴파일러 경고: Unsafe typecast, Unsafe code, Unsafe type 박지훈.임프 5748 2007/07/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.