안녕하세요. 이미보라입니다.
오늘은 C언어의 변수와 상수 대해서 살펴보도록 하겠습니다.
프로그램을 작성할 때, 우리는 자료 (Data)를 활용하게 됩니다. 예를 들어서 우리가 두 수를 더하는 프로그램을 작성한다고 생각해봅시다. 두 수가 만약에 1과 2라고 한다면, 1과 2는 자료에 해당됩니다.
우리는 자료를 상수 또는 변수의 형태로 사용 가능한데요.
먼저 상수는 값이 항상 일정한 데이터라고 생각하면 이해하기 쉽습니다. 상수는 아래와 같은 종류가 있습니다.
상수의 종류 : 리터럴상수, 매크로상수, const상수
리터럴 상수 : 정수, 실수, 문자, 문자열 등이 해당됩니다. 리터럴 상수의 프로그램에서 그 값이 직접 사용됩니다. ex: 원의 면적 = 반지름 * 반지름*3.14 라고 정의되었다면 3.14가 이에 해당됩니다. 매크로 상수 : #define MAX 10이라고 정의하여 사용하는 상수입니다. 매크로 상수의 경우, 선언 이후 MAX라는 이름으로 사용되며, 컴파일 이전에 전처리기가 MAX의 구문을 모두 10으로 치환하여 컴파일합니다. 만약 MAX값이 10에서 20으로 변경된다면 리터럴 상수의 경우 해당하는 구문을 모두 찾아서 수정해야 하는 반면, 매크로 상수는 상단에 정의한 부분만 #define MAX 20으로 수정하면 됩니다. const 상수의 경우 일반 변수와 같이 자료형을 선언하나, 키워드 const를 붙여 메모리의 내부의 값이 설정된다면 이후 변경되지 않도록 합니다. 이때 const 상수는 메모리 공간을 할당받아 상수의 값을 저장합니다. 예를 들어 const int max = 100; 이라고 const상수를 선언한다면 메모리 상에 4byte 만큼의 공간이 할당되고 그 공간의 이름을 우리는 max라고 부를 수 있습니다. const상수는 선언과 동시에 초기화를 해줘야합니다. 이유는 선언할 때 초기값이 설정되는데, 상수이기 때문에 이후에 값을 변경하려고 한다면 오류가 납니다. 예를 들어 const int min ; min = 2; 라고 선언과 값의 배정문을 따로 설정한다면 오류가 발생합니다. 이유는 이미 const int min의 문장에서 메모리 상에 4byte만큼 공간이 할당되면서, 이미 메모리 상에 존재했던 의미없는 값인 임의의 쓰레기값을 할당했기 때문입니다. 그래서 반드시 const상수는 선언과 동시에 값을 초기화해줘야합니다. |
반면에 변수는 변경이 가능한 데이터를 저장하는 메모리 공간입니다. 이 메모리 공간의 이름을 우리는 변수명이라고 부릅니다.
또, 우리가 앞으로 어떠한 데이터를 저장하기 위한 공간을 메모리 확보하는 작업을 우리는 변수를 선언한다라고 표현합니다.
변수를 사용하기 위해서 유의 사항은 다음과 같습니다.
변수 사용에 대한 주의사항
1. 변수는 사용 전에 반드시 선언되어야 합니다.
변수의 선언 형식은 아래와 같습니다.
자료형 변수이름;
자료형 변수이름1, 변수이름2, ... , 변수이름n;
예를 들면,
int number1 ;
int number2, number3;
과 같이 사용 가능합니다.
위의 변수 선언의 의미는 나는 프로그램을 실행할 때 정수를 저장할 메모리 공간 3개가 필요한데, 그 공간들의 이름은 number1, number2, number3 으로 부를꺼야 라고 컴파일러에게 미리 알려주는 의미를 가집니다.
( 위에서 나오는 자료형에 대해서는 다음 포스트에서 다루도록 하겠습니다. )
2. 변수는 선언 후 반드시 초기화되어야 한다.
변수의 초기화 형식은 아래와 같습니다.
int number4 = 0;
int number5;
number5 = 100;
C언어의 경우, 메모리에 공간을 할당받았을 때 내부에 쓰레기 값이라고 하는 의미 없는 값이 존재합니다.
따라서 반드시 초기화하여 사용해야 합니다.
초기화를 하지 않으면 프로그램이 오류가 발생하거나, 원치 않은 결괏값을 얻을 수 있습니다.
지금까지 우리는 변수와 상수에 대해서 살펴보았습니다.
C언어의 식별자 규칙
변수와 const상수는 메모리 공간에 이름을 정해줄 수 있는 데, 이와 같이 프로그램에서 다른 것들과 식별하기 위해서 사용하는 이름을 우리는 식별자라고 합니다.
식별자 : 변수명, 상수명, 함수명 등이 이에 해당된다.
식별자는 다음과 같은 규칙에 의해 생성될 수 있습니다.
1. 알파벳, 숫자, 밑줄(_) 만으로 구성된 이름이어야 한다.
2. 첫 문자에 숫자는 불가능하다.
3. 최대 255자까지 사용할 수 있다.
4. 예약어는 사용이 불가능하다.
식별자의 정의에서 알 수 있듯이 서로 다른 것들을 구분하기 위해 지은 이름이므로 중복되어 선정할 수 없습니다.
만약에 변수를 선언할 때, int number1, number1 ; 라고 선언이 가능하다고 합시다.
즉 메모리에 데이터를 저장할 수 있는 두 개의 다른 공간에 number1이라는 이름을 중복해서 붙여지게 된다는 것입니다. 그렇다면 프로그램의 입장에서는 number1의 데이터 값을 가져올 때 두 공간 중 어떤 공간의 데이터 값을 원하는지 알 수 없게 되겠죠? 따라서 이 경우 number1는 식별자로 볼 수 없습니다.
예약어 또한 식별자로 사용할 수 없는데, 예약어란 프로그램에서 어떠한 목적으로 사용되기 위하여 이미 정해진 기능이 있는 예약된 단어들을 말합니다.
아래의 예약어들은 절대 식별자로 사용할 수 없습니다.
C언어의 예약어
auto |
break |
case |
char |
const |
continue |
default |
do |
double |
else |
enum |
extern |
float |
for |
goto |
if |
int |
long |
register |
return |
short |
signed |
sizeof |
static |
struct |
switch |
typedef |
union |
unsigned |
void |
volatile |
while |
우리는 오늘 변수와 상수, 그리고 식별자와 예약어에 대해서 알아보았습니다.
다음 포스트에서 자료형이란 무엇이고, C언어에서 자료형은 어떠한 것들이 있는지 살펴보도록 하겠습니다.
감사합니다.
댓글