C++ 변수 선언 및 초기화 방법

프로그램 언어에서 기본적으로 알아가는 것이 변수 선언과 변수 초기화 방법입니다.

C++에서 변수 선언과 초기화 방법을 어떻게 하는지 알아보겠습니다.

 

변수 선언

C언어에서는 변수 선언을 블럭의 시작 부분에 미리 작성해야 합니다.

하지만 C++에서는 C언어처럼 블럭 시작 부분에 미리 작성하지 않아도 됩니다.

C++에서는 어떠한 처리를 시작하기 전에 변수를 선언해 사용할 수 있습니다.

C#이나 PHP자바 등의 언어와 같다고 보면 됩니다.

그리고 C++에서는 반복문인 for문 초기화 부분에서도 변수를 선언할 수 있습니다.

단, for문 초기화 부분에서 선언한 변수는 for문 안에서만 사용 가능합니다.

#include <iostream>

int main(int argc, char **argv)
{
    int a, b;           // 변수 선언
    std::cin >> a >> b;
    int sum = a + b;    // 처리와 동시에 변수 선언
    std::cout << sum << std::endl;

    for (int i = 0; i < argc; ++i)  // for문 초기화부분에서 변수 선언
        std::cout << argv[i] << std::endl;

    return 0;
}

 

변수 초기화

다른 프로그래밍 언어와는 다르게 C++에서는 변수를 자동으로 초기화하지 않습니다.

변수가 컴파일러에 의해 메모리 위치가 할당되면, 

그 변수의 기본값은 메모리에 쓰레기 값(garbage value)으로 할당됩니다.

선언한 변수를 초기화 또는 값을 대입하지 않으면 잘못된 결과가 발생할 수 있습니다.

#include <iostream> 

int main(int argc, char **argv) {

    // 정수 변수 x를 선언.
    // 선언한 변수 x는 초기화되지 않은 변수.
    int x;  
    
    // 정수 변수 x의 값을 출력. 
    // 초기화되지 않았기 때문에 쓰레기 값을 출력. 
    std::cout << x; 
    
    return 0;
}

 

결과

warning C4700: uninitialized local variable 'x' used

 

네이스페이스 (namespace)

네이스페이스는 이름 충동을 방지하기 위해 사용합니다.

네이스페이스에 math를 정의한 샘플입니다.

#include <iostream>

namespace math
{
    double pi = 3.14159;                // 네임스페이스 안에서 선언
}

double pi = 3.14;                       // 전역 변수

int main()
{
    double pi = 3;                      // 지역 변수

    std::cout << math::pi << std::endl;  // 3.14159 네임스페이스에 대입
    std::cout << ::pi << std::endl;      // 3.14    전역 변수에 대입    
    std::cout << pi << std::endl;        // 3       지역 변수에 대입

    return 0;
}

 

네임스페이스 math에 있는 변수 등에 접근하기 위해서는 스코프 연산자 :: 를 사용합니다.

pi변수에 접근하기 위해 math::pi라고 작성합니다.

만약 스코프 연산자인 :: 앞에 네임스페이스를 지정하지 않으면 전역 변수에 값이 대입됩니다.

 

using 선언

C++의 네임스페이스를 간편하게 사용할 수 있도록 도와주는 것이 using입니다.

using은 선언 또는 지시자 역할을 합니다.

using 선언 샘플을 보겠습니다.

#include <iostream>

int main()
{
    using std::cout;      // using 선언
    cout << "hello, world" << std::endl;
    return 0;
}

제한된 이름 앞에 using을 붙여주면 됩니다.

using 선언을 하게 되면 ::연산자로 접근을 하지 않아도 접근이 가능하게 됩니다.

using 지시자 역할을 하는 샘플을 보겠습니다.

#include <iostream>

int main()
{
    using namespace std;     // using 지시자
    cout << "hello, world" << endl;
    return 0;
}

 

결과

hello, world

지시자는 해당 네임스페이스의 모든 이름을 ::연산자 없이 사용할 수 있습니다.

댓글