minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (3)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • 티스토리폰트배경색없애기
  • 19년식그램램장착
  • 이차원구조체배열포인터
  • OpenGL회전
  • SpringBootSwagger
  • hello테마
  • 인공지능개발자
  • kafka구축
  • AI배워야하나
  • 구조체매개변수
  • GSLB
  • mfc
  • 구조체배열포인터
  • 19년식그램SSD장착
  • API문서정리
  • 그램업그레이드
  • 이것이C++이다책참고
  • 리눅스파티션
  • NextJSSwagger
  • 그램풀스팩업그레이드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️C++

[C++] 식별자 검색 순서

2023. 9. 7. 17:03

식별자가 선언된 위치를 검색하는 순서

  1. 자신이 속한 블록 범위
  2. 상위 블록 범위
  3. 가장 최근에 선언된 전역 변수
  4. using 선언과 전역 변수

 

1. 자신이 속한 블록 범위

int nData(20);    //(1)

int _tmain(int argc, _TCHAR* argv[]){
    int nData(10);   //(2)
    
    cout << nData << endl;    //(2)를 사용한다. 현재 블록 범위에 있기때문
    
    return 0;
}

2. 상위 블록 범위

int nInput = 10; //(1)

int _tmain(int argc, _TCHAR* argv[]){
    int nInput = 0;  //(2)
    
    if(nInput > 10){
        cout << nInput << endl;  //(2)를 사용한다. 중첩된 블록 범위의 상위로 검색 범위를 확장
    }
}

3. 가장 최근에 선언된 전역 변수

int nData = 200;  //(1)

namespace TEST{
    int nData = 100;  //(2)
    void TestFunc(void){
        cout << nData << endl;  //(2)를 사용한다. 이 줄 입장에서는 (2)가 가장 최근에 선언된 변수이기 때문
    }
}

int _tmain(int argc, _TCHAR * argv[]){
    Test::TestFunc();
    return 0;
}
int nData = 200;  //(1)

namespace TEST{
    void TestFunc(void){
        cout << nData << endl;  //(1)를 사용한다. 
        //전역변수는 네임스페이스를 생각하지 말고 선언 순서를 생각해야한다.
        //이 줄보다 (1)이 먼저 선언됐으므로 (1)을 사용
    }
    int nData = 100;  //(2)    << 앞라인에서는 호출 할 수 없다.
}

int _tmain(int argc, _TCHAR * argv[]){
    Test::TestFunc();
    return 0;
}

 

4. using 선언과 전역 변수

int nData = 100;  //(1)

namespace TEST{
    int nData = 200;  //(2)
}

int _tmain(int argc, _TCHAR * argv[]){
    cout << nData < endl;   //(1)을 사용한다. 
    //탐색 순서라기 보다는 네임스페이스를 지정하지 않았으니 당연히 전역네임스페이스에 있는 식별자가 선택된다.
    
    return 0;
}
int nData = 100;  //(1)

namespace TEST{
    int nData = 200;  //(2)
}

using namespace TEST;

int _tmain(int argc, _TCHAR * argv[]){
    cout << nData < endl;   //컴파일 오류. _tmain()함수에서 nData변수에 접근하는 코드는 
    //전역 네임스페이스에 속한 nData와 TEST 네임스페이스에 속해있는 nData 모두가 해당된다.
    return 0;
}


//오류를 해결하기 위해서는
::nData 라고 범위 지정 식별자를 기술하거나
Test::nData 라고 정확히 네임스페이스를 기술해야 한다.

 

더보기
 

Visual Studio C++ 사전

c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1. C에서 C++로 문법 전환하기 Chap1. C와는 다른 C++ [C++] Hello world 출력해보기 [C++] 여러 변수 출력하기 [C++] Visual Studio 에서 추가로 사용

genius-duck-coding-story.tistory.com

'◼️C++' 카테고리의 다른 글

[C++] 클래스 기본 문법  (0) 2023.09.17
[C++] 객체지향 프로그래밍 개요  (0) 2023.09.17
[C++] 네임스페이스, using, 네임스페이스 중첩, 네임스페이스 다중정의  (0) 2023.09.06
[C++] 인라인 함수  (0) 2023.09.05
[C++] 함수다중정의(오버로딩), 템플릿 함수  (0) 2023.09.05

    티스토리툴바