본문 바로가기
개념/혼자 공부하는 C언어

chapter 13) 두 함수에서 같은 이름의 지역 변수를 사용한 경우

by kiseno 2024. 8. 28.
728x90
반응형
SMALL
#include <stdio.h>

void assign(void);

int main(void){
    auto int a = 0;

    assign();
    printf("main function a : %d\n", a);

    return 0;
}

void assign(void){
    int a;

    a = 10;
    printf("assign function a : %d\n", a);
}

 

- **`main` 함수**:
  - `auto int a = 0;`를 통해 `main` 함수의 지역 변수 `a`를 선언하고 0으로 초기화합니다. `auto` 키워드는 지역 변수의 기본 저장 클래스를 지정하며, 일반적으로 생략됩니다. 이 변수는 `main` 함수 내에서만 유효합니다.
  - `assign` 함수를 호출합니다. 이 함수는 별도의 지역 변수 `a`를 선언하고, 이 변수에 10을 할당한 뒤 출력합니다.
  - `assign` 함수 호출 후, `main` 함수의 `a` 변수 값(0으로 초기화된 상태)을 `printf` 함수를 사용하여 출력합니다. 이때 출력되는 값은 `main` 함수 내의 `a` 값이므로 0입니다.

- **`assign` 함수**:
  - 이 함수 내에서 별도의 지역 변수 `a`를 선언하고, 이에 10을 할당합니다. 이 `a`는 `assign` 함수 내에서만 유효한 지역 변수입니다.
  - 함수 내에서 지역 변수 `a`의 값을 `printf` 함수를 통해 출력합니다. 출력된 값은 이 함수 내에서 `a`에 할당된 값인 10입니다.

이 예제는 함수 간 변수의 범위와 독립성을 보여주는 좋은 예시입니다. 

`main` 함수와 `assign` 함수에서 선언된 `a` 변수는 이름은 같지만 서로 다른 메모리 주소를 가지는 독립된 변수입니다. 

따라서 하나의 함수에서 `a`의 값을 변경해도 다른 함수에 영향을 미치지 않습니다. 

이는 C 프로그래밍에서 함수 내 지역 변수의 스코프가 해당 함수 내로 제한된다는 중요한 개념을 설명합니다.

728x90
반응형
LIST