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

C++빌더 Q&A
C++Builder Programming Q&A
[4724] Re:빌더에서 중복 선언....
박지훈.임프 [cbuilder] 2915 읽음    2001-01-02 00:00
버니 님이 쓰신 글 :
:
: for(int i;i<10;i++){
:                     내용
: }
:
: for(int i;i<10;i++){
:                     내용
: }
:
: 이게 중복 선언이 되는건가요?
:
: 안되는건가요?
:
: 제가 알기로는 중복선언이 아니고..바로 쓰고 바로 소멸되는걸로 알고 있습니다.
:
: 근데.. 비절 씨에서는...중복선언으로 걸린다네요..^^
:
: 빌더에서는 안걸리는데 내부적으로 오류가 발생하는듯 합니다.
:
: 그래서..밑에 질문했던데로..
:
: 코드 인사이트 기능이 죽었던거구요.
:
: 이문제를 해결하니..(함수 맨위에..int i 선언후 사용)
:
: 코드 인사이트 기능이 되살아났습니다..^^
:
: 이질문에도 답변 바랍니다..^^
:


임펠리테리입니다.

ANSI C++ 스펙에 의하면 로컬변수는 블럭("{" 와 "}") 내에서 생성됩니다. 단지 아무것도 하는 일이 없는 블럭만 만들어놓고 그 안에서 로컬변수를 하나 만들어도 그 로컬변수의 범위(scope)는 그 변수가 속한 가장 안쪽의 블럭에만 적용되는 겁니다.

말씀하신대로 두개의 for 블럭 내에서 만들어진 각각의 i 변수는 각각의 블럭 안에서 생성되고 블럭이 끝나는 즉시 파괴됩니다. 그러므로 두 i 변수 사이에는 이름이 같을 뿐, 아무런 연관성이 없죠.

또한, 말씀하신대로 비주얼씨에서는 이 코드가 컴파일에러를 내는데, 사실 이것은 꽤 알려진 비주얼씨의 컴파일러버그입니다. 버그라고 말하니 좀 이상하시겠습니다만, 더 정확히 말하자면 비주얼씨 컴파일러가 ANSI C++ 표준을 100% 따르지 않기 때문에 생기는 문제죠.

이 문제가 코드인사이트 기능과 직접 관련이 있는지에 대해서는 코드 내용을 정확히 알 수 없어 답변을 드리기가 곤란하군요. 단지, 코드인사이트는 소스를 컴파일러 정도로 고수준 파싱을 하는 것이 아니라 단순 파싱을 하기 때문에 컴파일러에러와는 무관하게 동작하든지 동작하지 않든지 할 수 있습니다.

그럼 참고하시길...

+ -

관련 글 리스트
4723 빌더에서 중복 선언.... 버니 2859 2001/01/02
4724     Re:빌더에서 중복 선언.... 박지훈.임프 2915 2001/01/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.