Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++에서 초기화되지 않은 기본 데이터 타입이 가지는 값은 무엇일까?

C나 C++에서 변수를 선언만 하고 초기화하지 않으면, 그 변수는 과연 어떤 값을 가지고 있을까요? 많은 개발자가 컴파일러가 자동으로 int에는 0을, float에는 0.0을 할당해 준다고 생각합니다. 그렇다면 char 타입은 어떨까요? 이번 글에서는 실제 코드를 여러 컴파일 환경에서 실행하며 그 결과를 직접 확인해 보겠습니다.

예제 코드 (C++)

다음 예제는 char, float, int, double, long 다섯 가지 기본 데이터 타입 변수를 선언한 뒤 초기화 없이 바로 출력하는 코드입니다.

#include <iostream>
using namespace std;
int main() {
    char char_var;
    float float_var;
    int int_var;
    double double_var;
    long long_var;
    cout << char_var << endl;
    cout << float_var << endl;
    cout << int_var << endl;
    cout << double_var << endl;
    cout << long_var << endl;
}

실행 결과 비교

Cpp.sh 온라인 컴파일러 결과

0
0
0
0

Online GDB 결과

5.88054e-39
0
6.95297e-310
0

로컬 시스템 결과

9.73438e-039
4309744
1.15685e-306
-53505136

흥미롭게도 실행 환경마다 결과가 완전히 다르게 나타납니다. 어떤 환경에서는 0이 출력되기도 하지만, 다른 환경에서는 예측할 수 없는 쓰레기 값(garbage value)이 출력됩니다.

왜 컴파일러는 기본값을 할당하지 않을까?

그렇다면 C/C++ 컴파일러는 왜 변수에 기본값을 자동으로 할당하지 않을까요? 답은 간단합니다. 스택에 생성되는 지역 변수를 매번 초기화하는 작업은 상당한 오버헤드를 유발하며, 프로그램 실행 속도를 저하시키기 때문입니다. 따라서 초기화되지 않은 지역 변수는 불특정(indeterminate) 값을 가질 수 있습니다.

결론적으로, 초기화되지 않은 변수의 값은 컴파일러와 실행 환경에 따라 달라지므로 절대 예측해서는 안 됩니다. 따라서 기본 데이터 타입 변수는 선언과 동시에 반드시 명시적으로 초기화한 후 사용하는 것이 좋은 코딩 습관입니다.