C언어 변수 & 연산자 상수

    2018-03-23 20:19:27 작성

    상수란 값을 변경할 수 없는 데이터를 말합니다.
    상수는 크개 두가지 종류로 나눌수 있습니다.

    • 리터럴(Literal) 상수
    • 심볼릭(Symbolic) 상수

    이름을 지니지 않은 상수 리터럴(Literal)

    #include <stdio.h>
    
    int main(void) {
        int a = 10; // 10은 정수형 상수이다.
        double b = 3.45; // 3.45는 실수형 상수이다.
        return 0;
    }

    위의 코드에서 보면 10과 3.45는 메모리 공간에 상수의 형태로 저장이 됩니다.
    변수로 선언된 a나 b와 달리 10과 3.45는 메모리 공간에 이름이 없는것을 알수 있습니다.
    이렇게 메모리 공간에 이름이 없는 상수를 가리켜 리터럴 상수 또는 리터럴 이라고 합니다.

    대입연산의 왼편에 있는 변수의 자료형에 따라 상수의 자료형이 결정되는 것이 아니고​,
    4행에서 보듯 10과 같이 int 형으로 표현가능한 정수형 상수는 int 형으로 메모리 공간에 저장되고,
    5행에서 보듯 3.45와 같이 double 형으로 표현 가능한 실수는 double 형으로 메모리 공간에 저장되도록 되어있습니다.


    리터럴 상수의 자료형

    #include <stdio.h>
    
    int main(void) {
        char c = 65; // 65는 int형 상수이다.
        float d = 7.54; // 7.54는 double형 상수이다.
        return 0;
    }

    4행의 변수 c는 자료형이 char형 이지만 65는 int형 자료형입니다.
    5행도 마찬가지로 변수 d는 float형 이지만 7.54는 double형 자료형입니다.
    위의 코드를 실행해 보면 아래와 같이 경고 메시지가 발생하는것을 볼 수 있습니다


    7.54는 double(8 Byte)이고 변수 d는 float(4byte) 이기 때문에 데이터가 잘려나갈 수 있다는 경고 입니다.
    그렇게 때문에 C언어에서는 다양한 자료형의 상수를 표현 하기 위해 다음과 같은 접미사를 정의 하고 있습니니다.

    상수 표현을 위한 접미사
    구분 접미사 자료형
    정수형 U unsigned int unsigned int n = 1024U
    L long long n = 2048L
    UL unsigned long unsigned long n = 3072UL
    LL long long long long n = 4096LL
    ULL unsigned long long unsigned long long n = 7168ULL
    실수형 F float float f = 3.14F
    L long double long double f = 7.168L


    이름을 지니는 상수 심볼릭(Symbolic)

    심볼릭 상수는 변수와 같이 이름을 지니는 상수를 말합니다.
    심볼릭 상수를 표현하는 방법에는 두가지 종료가 있습니다.

    • const 키워드를 사용하는방법
    • 선행처리기의 매크로를 사용하는 방법

    const 키워드를 이용해 상수를 정의 하는 방법은 매우 간단합니다.
    변수 선언시 앞에 const 키워드를 붙여주기만 하면 됩니다.
    상수는 한번 정의되면 변경할 수 없기 때문에 선언 동시에 초기화를 한 문장에 해야 합니다.

    #include <stdio.h>
    
    int main(void) {
        const int MAX = 100;
        const double PI = 3.141592;
        return 0;
    }

    상수의 이름은 MAX, PI 등과 같이 일반적으로 모두 대문자로 표시하는 것이 관례입니다.

    매크로를 이용하여 상수를 정의하는 방법은 선행처리기에서 다루도록 하겠습니다.