|
버니 님이 쓰신 글 :
:
: for(int i;i<10;i++){
: 내용
: }
:
: for(int i;i<10;i++){
: 내용
: }
:
: 이게 중복 선언이 되는건가요?
:
: 안되는건가요?
:
: 제가 알기로는 중복선언이 아니고..바로 쓰고 바로 소멸되는걸로 알고 있습니다.
:
: 근데.. 비절 씨에서는...중복선언으로 걸린다네요..^^
:
: 빌더에서는 안걸리는데 내부적으로 오류가 발생하는듯 합니다.
:
: 그래서..밑에 질문했던데로..
:
: 코드 인사이트 기능이 죽었던거구요.
:
: 이문제를 해결하니..(함수 맨위에..int i 선언후 사용)
:
: 코드 인사이트 기능이 되살아났습니다..^^
:
: 이질문에도 답변 바랍니다..^^
:
임펠리테리입니다.
ANSI C++ 스펙에 의하면 로컬변수는 블럭("{" 와 "}") 내에서 생성됩니다. 단지 아무것도 하는 일이 없는 블럭만 만들어놓고 그 안에서 로컬변수를 하나 만들어도 그 로컬변수의 범위(scope)는 그 변수가 속한 가장 안쪽의 블럭에만 적용되는 겁니다.
말씀하신대로 두개의 for 블럭 내에서 만들어진 각각의 i 변수는 각각의 블럭 안에서 생성되고 블럭이 끝나는 즉시 파괴됩니다. 그러므로 두 i 변수 사이에는 이름이 같을 뿐, 아무런 연관성이 없죠.
또한, 말씀하신대로 비주얼씨에서는 이 코드가 컴파일에러를 내는데, 사실 이것은 꽤 알려진 비주얼씨의 컴파일러버그입니다. 버그라고 말하니 좀 이상하시겠습니다만, 더 정확히 말하자면 비주얼씨 컴파일러가 ANSI C++ 표준을 100% 따르지 않기 때문에 생기는 문제죠.
이 문제가 코드인사이트 기능과 직접 관련이 있는지에 대해서는 코드 내용을 정확히 알 수 없어 답변을 드리기가 곤란하군요. 단지, 코드인사이트는 소스를 컴파일러 정도로 고수준 파싱을 하는 것이 아니라 단순 파싱을 하기 때문에 컴파일러에러와는 무관하게 동작하든지 동작하지 않든지 할 수 있습니다.
그럼 참고하시길...
|