• 프로그래밍 언어 활용 part 1 - 변수의 스코프

    2021. 7. 26.

    by. 고구마달랭이

    변수의 스코프

    [학습내용] [학습목표]
    지역변수
    전역변수
    지역변수의 유효범위를 알고 사용할 수 있다.
    ▪ 전역변수의 유효범위를 알고 사용할 수 있다.

    지역변수

     

    1. 개요

    변수 스코프(Scope) : 변수 참조가 가능한 유효범위

    함수 내에 선언된 변수, Local Variable

    변수가 선언된 블록에서만 유효한 변수

    함수가 시작 시 생성, Stack에 생성

    함수가 종료되면 변수도 소멸

    초기화 전 쓰레기 값을 가지고 있음

    매개변수도 지역변수

     

    int main()
    {
     int a,b;
     char c;
    }
    void sub()
    {
    int a;
    }

     


    2. 유효범위

    ▪ 변수가 선언된 블록에서만 유효

    int main()
    
    {
    
    int a=3,b;
    
    char c;
    
    }
    
    void sub()
    
    {
    
    printf(“%d”, a);
    
    }

     

     

    ▪ 함수 시작 시 생성되고 종료 시 소멸

    int main()
    
    {
    
    int a=3,b;
    
    char c;
    
    sub();
    
    }
    
    void sub()
    
    {
    
    int a=5;
    
    printf(“%d”, a);
    
    }

     

    ▪ 생성 시 쓰레기 값을 가짐

    ▪ 매개변수도 지역변수임

    int main()
    
    {
    
    int a=3,b;
    
    char c;
    
    printf(“%d”, a);
    
    printf(“%d”, b);
    
    b=2;
    
    sub(a);
    
    printf(“%d”, a);
    
    printf(“%d”, b);
    
    return 0;
    
    }
    
    void sub(int b)
    
    {
    
    int a=5;
    
    printf(“%d”, a);
    
    b = a+b;
    
    printf(“%d”, b);
    
    }

     

    ▪ 블록 내에서 변수 선언이 가능(C99)

    ▪ 선언된 블록에서 유효

     

    C 언어 표준
     1983(ANSI : American National Standard Institute) 에서 ANSI C라는 표준안을 발표
     이후 ISO 주도로 표준안을 발표(C99, C11)

    전역변수

    ▪ 프로그램 내 전체 함수에서 유효, Global Variable

    ▪ 프로그램 시작 시 생성, 데이터 영역에 생성

    ▪ 프로그램 종료 시 소멸

    ▪ 함수 밖에서 선언

    ▪ 자동으로 0으로 초기화

    ▪ 전역변수는 프로그램 전체에서 참조하므로 복잡성을 증대

    ▪ 모듈화의 독립성 확보가 어려움

    ▪ 메모리 공간을 점유

    ▪ 동일한 이름의 전역변수와 지역변수 사용 시 지역변수가 우선함

    #include <stdio.h>
    
    int sub(int);
    
    int main()
    
    {
    
    int a
    
    printf(“%d”, a); a=3;
    
    printf(“%d”, a);
    
    a = sub(a);
    
    printf(“%d”, a);
    
    return 0;
    
    }
    
    int sub( int a)
    
    {
    
    printf(“%d”, a);
    
    a++;
    
    return a;
    
    }

     

    #include <stdio.h>
    
    int a;
    
    int main()
    
    {
    
    printf(“%d”, a); a=3;
    
    printf(“%d”, a);
    
    sub();
    
    printf(“%d”, a);
    
    return 0;
    
    }
    
    void sub( )
    
    {
    
    printf(“%d”, a);
    
    a++;
    
    }

     

    #include <stdio.h>
    
    int a;
    
    int main()
    
    {
    
    int a= 7;
    
    printf(“%d”, a); a=3;
    
    printf(“%d”, a);
    
    sub();
    
    printf(“%d”, a);
    
    return 0;
    
    }
    
    void sub( )
    
    {
    
    int a = 5;
    
    printf(“%d”, a);
    
    a++;
    
    }

     

     

     


     

     

    2. 다중 파일

    ▪ extern을 선언하여 외부에서도 참조 가능

    ▪ extern int 변수;  외부에 선언된 변수를 참조한다는 선언문

    main.c sub.c
    #include <stdio.h>

    int a;

    int main()
    {

    int a= 7;

    printf(“%d”, a); a=3;
    printf(“%d”, a);

    sub();

    printf(“%d”, a);

    return 0;
    }
    extern int a;

    void sub( )
    {

    printf(“%d”, a);
    a++;
    }

     

     

     


     

     

    평가하기

     

    Q1. 지역변수에 대한 설명으로 옳지 않은 것은 무엇인가?


    스택 영역에 생성된다.
    ② 선언 시 0으로 초기화된다.
    ③ 선언된 블록을 빠져나가면 소멸된다.
    블록 내에서 선언되는 변수이다.

     

    지역변수는 선언만 하고 자동으로 초기화하지는 않으므로 쓰레기 값이 있습니다.




    Q2. 다음 중 전역변수에 대한 설명으로 옳지 않은 것은 무엇인가?


    함수 밖에서 선언되어 프로그램 전체에서 유효하다.
    ② 선언 시 자동으로 0으로 초기화된다.
    ③ 동일 프로그램 내의 다른 함수에서 사용하려면 별도의 선언문을 추가해야 한다.
    필요 시 다른 파일에서도 사용 가능하다.

     

    전역변수는 다른 함수에서도 별도의 선언 없이 유효합니다.

     



    Q3. 전역변수 정수형을 선언하면 어떤 값으로 초기화되는가?


    초기화되지 않음
    0으로 초기화
    ③ 1로 초기화
    ④ null로 초기화

    정수형은 0으로 초기화됩니다.

     

     

     


     

     

    학습정리

     

    1. 지역변수

    변수 스코프(Scope) : 변수 참조가 가능한 유효범위

    함수 내에 선언된 변수, Local Variable

    변수가 선언된 블록에서만 유효한 변수

    함수가 시작 시 생성, Stack에 생성

    함수가 종료되면 변수도 소멸

    초기화 전 쓰레기 값을 가지고 있음

    매개변수도 지역변수

    유효범위

    - 변수가 선언된 블록에서만 유효

    - 함수 시작 시 생성되고 종료 시 소멸

    - 생성 시 쓰레기 값을 가짐

    - 매개변수도 지역변수임

    - 블록 내에서 변수 선언이 가능(C99)

    - 선언된 블록에서 유효

     

    2. 전역변수

    프로그램 내 전체 함수에서 유효, Global Variable

    프로그램 시작 시 생성, 데이터 영역에 생성

    프로그램 종료 시 소멸

    함수 밖에서 선언

    자동으로 0으로 초기화

    전역변수는 프로그램 전체에서 참조하므로 복잡성을 증대

    모듈화의 독립성 확보가 어려움

    메모리 공간의 점유

    다중 파일

    - extern을 선언하여 외부에서도 참조 가능

     

     

    댓글