변수와 상수는 프로그램에서 사용되는 기본적인 데이터입니다. 변수와 상수를 사용하기 위해서는 사용할 변수를 형식에 맞게 선언을 하고 값을 지정해 줄 필요도 있습니다. 변수와 상수는 데이터형(Data type)에 따라 사용할 수 있는 값과 그들을 다룰 연산이 결정됩니다.
이번 포스팅에서는 기본 데이터형과 변수 및 상수의 개념과 사용 예제를 다루겠습니다.
1. 변수 (Variable)
변수는 데이터형에 맞는 값이 변경이 가능한 메모리 공간입니다. 예를 들어 나이라는 데이터를 아래와 같이 선언하고 초기값을 지정했다고 합시다.
int age = 10;
위의 문장에서는 나이를 의미하는 age라는 변수명을 int형이라는 데이터형으로 선언하고 값을 10으로 지정했다는 의미입니다. '='기호는 수학에서는 등호로 같다라는 의미이지만, C언어에서는 오른쪽에 있는 값을 왼쪽에 대입하라는 대입연산자입니다. 그리고 문장의 끝을 의미하는 세미콜론(;)으로 선언을 마무리 했습니다. 그런데 나이는 고정된 값이 아니기 때문에 5년 후에는 15살이 될 것이므로,
age = 15;
이렇게 바뀔 수 있습니다. 이렇게 값이 변할 수 있는 데이터를 변수(Variable)라 부릅니다.
변수의 이름은 영문자와 숫자(alphanumeric)만을 사용해야 하며 특수문자는 '_' 만 사용 가능합니다. 변수 이름의 시작은 반드시 영문자나 특수문자 '_'로만 시작하여야 합니다. 변수이름은 대소문자를 구분하고 언어 내부에 정의된 예약어를 사용하면 안됩니다.
2. 기본 데이터형 (Basic Data Type)
C는 char, int, float, double등의 기본 데이터형이 있고, 몇개의 한정자(qualifier)를 이용하여 확장이 가능합니다.
정수형에는 short, long 등을 쓸 수 있고, 문자와 정수형에는 부호가 없는 unsigned를 사용할 수 있습니다. int형은 시스템마다 차이가 있습니다. 보통의 윈도우 32/64bit 기준으로 보면 int형은 4 byte, short int형은 int의 반인 2 byte, long int형은 int형과 같인 4 byte 등 입니다. 그리고 부동소숫점은 소숫점아래의 정밀도에 따라 적절한 선택을 하는게 좋은데요, long double이라는 부동소숫점의 소숫점 아래 정밀도가 가장 높습니다. 정수형, 실수형에 따라 구분하여 아래와 같이 표로 정리해 봤습니다.
이외에 C99에서 추가된 bool타입이 있습니다. 이는 한 byte로 논리형 값인 True(0아닌 값=1)/False(0)만 갖는 타입으로 stdbool.h 파일을 include해야 사용할 수 있습니다.
3. 상수 (Constant)
상수는 변하지 않는 값으로 시스템 내부나 헤데파일에 정의 되어 있거나, 사용자는 보통 #define으로 사용합니다. 정수형 상수 1234는 int형 상수입니다. long형 상수는 1234L, unsigned long형 상수라면 1234UL로 접미사를 붙여 사용합니다.
정수는 10진수 외에 8진수나 16진수로도 표기가 가능합니다. 예를 들어 십진수 31은 8진수로 표현하면 037 (0이 앞에 붙습니다.) 16진수로 표현하면 0x1f(0x가 앞에 붙습니다.)입니다. 문자상수도 정의가 가능한데 ' '와 같은 따옴표 안에 문자를 넣어서 정의 합니다. 만약 아래와 같이 정의 했다고 하면,
#define MY_ZERO '0'
MY_ZERO를 문자 '0'을 갖는 상수로 취급하여 사용할 수 있습니다. 그리고 이 문자 '0'은 ASCII값에 해당하는 숫자 48을 넣어도 동일하게 작동합니다.
#include <stdio.h>
#define MY_ZERO '0'
#define MY_ZERO1 48
void main()
{
printf("my_zero (%d, %c)\n", MY_ZERO, MY_ZERO);
printf("my_zero1 (%d, %c)\n", MY_ZERO1, MY_ZERO1);
}
이를 실행하면 다음과 같습니다. 문자열 상수는 문자에 해당하는 정수형 값을 갖고 있음을 알수 있습니다.
my_zero (48, 0)
my_zero1 (48, 0)
다음으로 문자열 상수가 있는데, 이는 배열 및 포인터에서 자주 다루도록 하고 다음과 같이 정의가 가능합니다.
#define HELLO_STRING "hello, world!"
HELLO_STRING이라는 상수에 문자열 "hello, world!"를 저장하라는 의미입니다.
마지막으로 열거형 (enumeration) 상수가 있습니다. 열거란 다음과 같은 정수형 상수를 나열한 것입니다.
enum boolean {NO, YES};
논리형 데이터 타입이 존재하지만 C89/90에서는 이와 같이 사용하기도 했습니다. 특별히 값을 지정하지 않으면 NO=0, YES=1의 값을 차례대로 갖습니다.
enum months = {JAN=1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};
이와 같이 선언하면 FEB=2, MAR=3, ... NOV=11,, DEC=12 값을 갖게 됩니다.
이번 시간에는 변수와 상수에 대해서 알아 봤습니다. 다음시간에는 연산자에 대해 공부해 보겠습니다. 안녕~
'프로그래밍 > C언어' 카테고리의 다른 글
C언어 공부하기 - 순환문(1) while, for (0) | 2020.07.23 |
---|---|
C언어 공부하기 - 제어문 (1) | 2020.07.21 |
C언어 공부하기 - 연산자 (0) | 2020.07.20 |
C언어 공부하기 - 시작하기 (0) | 2020.07.16 |
C언어 공부하기 - 개요 (0) | 2020.07.14 |
댓글