쓰레기 값이란?
C언어에서 변수를 선언하면 어떠한 메모리 공간을 할당받는 것이다.
그렇다면 그 메모리 공간 안의 상황은 할당받을 당시 어떤 상황일까? 어디서 어떠한 의도로 그 메모리 공간이 사용되고 있었는지 모르기 때문에 그 안에는 의미 없는 값이 들어가 있는데 이러한 값들을 바로 쓰레기 값이라고 한다.
실제로 쓰레기 값이 들어있는지 한번 확인해 보도록 하자
int main()
{
int a;
printf("%d\n", a);
return 0;
}
다음과 같은 에러가 발생한다.
왜 쓰레기 값이 존재하는가?
사용자들이 생각하기에는 그렇다면 변수를 선언과 동시에 초기화를 시킨다면 쓰레기값이 없을 텐데 왜 C언어에서는 그런 방향을 만들지 않았을까 하는 의문이 생길 수 있습.
이 이유는 연산의 증가가 발생하기 때문이다.
예를 들어 아래 소스코드의 변수 a와 b를 비교해보자
int a = 0; //a에 0의 값을 넣는 연산
scanf("%d",&a); //입력
int b; //b의 선언 초기화 연산 없음
scanf("%d",&b); //입력
이런 경우에는 초기화의 필요가 없다. 변수를 생성한 메모리 공간에 scanf함수를 통해 바로 값을 치환하기 때문이다.
C언어는 가장 효율적인 프로그램, 다시 말하면 컴퓨터가 불필요한 일을 최대한 줄이수 있도록 만들어졌기 때문에 필연적으로 쓰레기 값이 존재할 수밖에 없다.
물론 오늘날 컴퓨터들의 사양은 엄청나게 좋아서 이러한 영향이 적을 가능성이 크지만, C언어를 사용한다면 이런 개념을 알고 있어야 실수를 줄일 수 있다.
모든 변수에 쓰레기 값이 존재하는 것은 아니다.
쓰레기 값은 결국 C언어에서 최적의 효율을 내기 위해서 생긴 불순물 같은 요소라고 생각하면 된다.
하지만 C언어에서도 프로그램의 안전을 더 우선순위로 하는 변수들에 대해서는 초기화를 자동적으로 해준다.
이런 변수들이 바로 전역 변수와 정적 변수들이다. 이 변수들은 프로그램의 시작과 종료까지 항상 존재하기 때문에 초기화를 따로 하지 않아도 자동적으로 초기화 연산이 들어간다.
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C] 이스케이프 문자(Escape Character) (0) | 2023.09.16 |
---|---|
[C++] 쓰레기값 거르기(아주 작은값) numeric_limits (0) | 2023.09.16 |
[C++] sort , stable_sort (0) | 2023.09.16 |
[C] gets 함수는 사용하지 말아야 한다. (0) | 2023.09.10 |
[C] while 반복문을 종료하는 방법: 센티넬, EOF, 플래그 (0) | 2023.09.10 |