이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[C] Scope

  • 2022.03.22 15:56
  • Programming Language/C
반응형

 

 

 

함수와 여러 문법을 중첩해서 사용할 때, 변수의 이름이 겹치는 경우가 많아 내가 어떤 변수를 사용하게 될 지 헷갈리는 경우가 많이 발생한다.

 

 void func1(){
    int i =0;
    while(1){
      int k = 100;
      int i =1;
      while(1){
        int i  = 2;
        while(1) {
          printf("%d %d", k, i); // 어떤 k 이고 어떤 i 일까?
        }
      }
    }
  }

 

바로 위와 같은 경우인데, 이 경우 가장 가까운 Scope부터 변수를 탐색한다.

위에서는 k에는 100, i에는 2가 해당된다.

 

이를 Scoping 규칙이라고 한다.

 

 

변수의 Scope와 Lifetime을 헷갈리면 안된다.

개념을 명확히 하고 가자.

 

Lifetime은 시간적인 개념이고, Scope는 공간적인 개념이라고 이해할 수 있다.

 

Scope는 프로그램의 몇 번째 줄 ~ 몇 번째 줄 로 표현할 수 있고

Lifetime은 함수 func1이 호출된 다음 리턴할 때 까지라고 표현할 수 있다.

 

전역변수의 Lifetime은 프로그램의 시작부터 끝까지이고, 지역변수의 Lifetime은 함수의 호출부터 리턴까지이다.

지역변수는 별도의 초기화를 진행하지 않을 시 스택 프레임에 남아 있는 쓰레기 값으로 초기화되고, 전역변수는 0으로 초기화된다.

 

여기서 전역변수와 정적변수의 차이점을 다시 한 번 부각할 수 있는데, 전역변수의 Scope는 전체 프로그램이지만 정적변수의 Scope는 해당 함수까지이다. (Lifetime은 유사하다)

 

 

 

 

 

 

 

 

반응형

'Programming Language > C' 카테고리의 다른 글

[C] 배열  (0) 2022.03.28
[C] 함수 간 소통 / 재귀  (0) 2022.03.22
[C] Register / Volatile  (0) 2022.03.22
[C] 스택 프레임  (0) 2022.03.22
[C] 입문  (0) 2022.03.22

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [C] 함수 간 소통 / 재귀

    [C] 함수 간 소통 / 재귀

    2022.03.22
  • [C] Register / Volatile

    [C] Register / Volatile

    2022.03.22
  • [C] 스택 프레임

    [C] 스택 프레임

    2022.03.22
  • [C] 입문

    [C] 입문

    2022.03.22
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (679) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (10)
    • 💬 기록 (8) N
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바