본문 바로가기
프로그래밍 언어/C 언어

[C/C++] 지역변수와 전역변수와 레지스터 변수

by 까망 하르방 2024. 12. 22.
반응형

변수는 선언되는 위치에 따라서 크게 『전역변수』 와 『지역변수』 로 나뉜다.

두 변수의 차이점은 메모리상에 존재하는 기간, 변수에 접근할 수 있는 범위

 

지역 변수

중괄호{} 내에 선언되는 변수는 모두 지역변수다.

즉, 선언된 지역 내에서만 유효

 

[예제 코드]

지역변수는 선언된 지역 내에서만 유효하기 때문에 

선언된 지역이 다르면 이름이 같아도 문제가 되지 않는다.

#include <stdio.h>

int SimpleFunc(void) {
       int num = 10;
        num++;
        printf("num = %d\n", num);
        return 0;
}

void main() {
        int num = 5;
        SimpleFunc();
        printf("num = %d\n", num);
}

 

 

함수{ } 내부에 선언된 변수를 초기화 하지 않고 접근시 C4700 Error 발생

#include <stdio.h>
int main(void) {
        int value;
        printf("%d\n", value);
        system("pause");
        return 0;
}

 

기본형 매개변수도 지역변수의 일종이다.

- 선언된 함수 내에서만 접근이 가능

- 선언된 함수가 반환을 하면, 지역변수와 마찬가지로 소멸

#include <stdio.h>
int SimpleFunc(int val) {
        
        val++;
        printf("val = %d\n", val);
        
        return 0;
}
void main() {

        int num = 5;
        SimpleFunc(num);

        printf("num = %d\n", num);
}

매개변수 형태를 위의 결과를 전역변수, 포인터 등을 이용해서 결과를 다르게 할 수 있다.

 

전역 변수

- 전역 변수의 경우에는 선언만 해주어도 기본값이 들어갑니다

- 프로그램의 시작과 동시에 메모리 공간에 할당되어 종료 시까지 존재.

- 프로그램 전체 영역 어디서든 접근이 가능하다.

- 만약 전역변수와 지역변수의 이름이 같다면 지역변수를 우선시 한다.

- 전역변수를 남용해서는 안됩니다.

    기존 전역변수 값을 변경하면 참조하고 있는 다른 함수의 코드내용도 변경될 수 있기에 구조가 복잡해질 수 있음

#include <stdio.h>

int value;
int main(void) {       
        printf("%d\n", value);
        system("pause");
        return 0;
}

 

C언어 변수 형태와 입출력

- int (%d) ← 4 byte

- long long (&lld) ← 8 byte

- double (입력 시 %lf, 출력 시 %f) ← 8 byte

입력 받을 때는 특정 주소에 특정 크기만큼 입력해야 하므로 %lf

출력할 때는 주소가 아닌 값 자체를 이용하므로 상세 크기 입력 불필요 %f

- float (%f) ← 4 byte

- string  (%s) ← 제한 없음

- char (%c) ← 1 byte

- bool 

 

레지스터 변수 (Register Variable)

메인 메모리 대신 CPU 레지스터 사용하는 변수

레지스터는 매우 한정되어 있으므로 실제로 레지스터에서 처리되는지는 보장 X

#include <stdio.h>

int main(void)
{
    register int a = 10;

    for (int i=0; i<a; i++)
    {
        printf("%d\n", i);
    }
}

 

 

📌 [C/C++] static 변수

 

[C/C++] static 변수

static 변수- static 변수를 정적 변수라고 부릅니다.- 전역변수와 지역변수 모두에 static 선언을 추가할 수 있다.  하지만 static 변수는 『접근이 제한된 전역변수』를 만드는 것이기에 지역변수에

zoosso.tistory.com

반응형

댓글