본문 바로가기
IT/프로그래밍

C언어 기초 - 컴파일러 및 자료형

by 미니송 2017. 7. 22.

C언어 기초 - 컴파일러 및 자료형

 

컴파일러

고급언어로 쓰인 프로그램이 컴퓨터에서 수행되기 위해서는 컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주어야 합니다. 이러한 일을 하는 프로그램을 컴파일러라고 합니다.

 

예를 들어 원시언어가 파스칼(Pascal)이나 코볼(Cobol)과 같은 고급언어(사람이 알아보기 쉬운 언어)이고 목적언어가 어셈블리 언어나 기계어일 경우, 이를 번역해 주는 프로그램을 컴파일러라 합니다.

 

파스칼이나 코볼을 몰라도 상관없습니다. 정리를 하면 C언어가 고급언어이고 이를 번역해서 컴퓨터가 알아 듣게 하려면 컴파일러가 필요합니다.

 

컴파일을 하기 위하여 입력되는 프로그램을 원시 프로그램이라 하고 이 프로그램을 기술한 언어를 원시언어(source language)라 합니다. (source language가 번역하면 원시언어가 되는데 저렇게 어려운 말을 써야 하는지 잘 모르겠습니다.)

 

번역되어 출력되는 프로그램을 목적 프로그램이라 하고 이 프로그램을 기술한 언어를 목적언어(object language 또는 target language)라 합니다. 한 프로그램을 컴파일하여 목적 프로그램으로 바꾸어 놓으면, 원시 프로그램을 수정하지 않는 한 계속 반복해서 수행할 수 있습니다.

 

크로스 컴파일러(cross-compiler)라는 것은 원시 프로그램을 컴파일러가 수행되고 있는 컴퓨터의 기계어로 번역하는 것이 아니라, 다른 기종에 맞는 기계어로 번역하는 컴파일러를 말합니다.

 

이 밖에 다른 번역기를 살펴보면 어셈블러(assembler), 인터프리터(interpreter), 그리고 프리프로세서(preprocessor) 등을 들 수 있습니다.

 

어셈블러는 어셈블리 언어로 쓰여진 프로그램을 입력으로 받아 기계어 프로그램으로 바꾸어 주는 번역기입니다. 어떤 번역기는 원시언어를 특수한 형태의 중간언어로 변환하는데 인터프리터는 이러한 중간언어를 입력으로 받아 목적언어로 변환하지 않고 직접 수행하는 프로그램입니다.

 

고급언어로 쓰여진 프로그램의 의미를 수행하는데 있어서 컴파일러는 그와 동등한 의미를 갖는 목적 프로그램으로 바꾸어 목적 프로그램을 수행함으로써 결과를 얻고, 인터프리터는 원시 프로그램의 의미를 직접 수행하여 결과를 얻습니다.

 

원시 프로그램의 수정 없이 계속 반복 수행하는 응용 시스템에서는 컴파일러가 효율적이며, 개발 시스템이나 교육용 시스템에서는 인터프리터가 더 능률적입니다.

 

 

자료형

자료형에 대해 간단히 설명하도록 하겠습니다.

 

C언어에서는 자료형은 정수형과 실수형 그리고 Void형으로 나눌 수 있습니다. 나중에 구조체와 같은 자료형도 존재합니다. 나중의 포스팅에서 설명하겠습니다. 우선은 기본적으로 정수형, 실수형과 void형만 있어도 충분히 프로그래밍을 할 수 있을 것입니다.

 

 

정수형( Integer )

표준 정수형의 크기 및 값의 범위 입니다. 정수형에는 char, unsigned char, signed char, int 등 많은 것들이 존재합니다. 여기서 unsigned는 부호가 없는 것을 뜻하고 signed는 부호가 있는 것을 뜻합니다.

 

char - 1바이트이며, -128~127의 값을 갖습니다.

unsigned char - 1바이트이며, 0~255의 값을 갖습니다.

signed char - 1바이트이며, -128~127의 값을 갖습니다.

int - 4바이트이며, -2147483648 ~ 2147483647의 값을 갖습니다.

 

unsigned int - 4바이트이며, 부호가 없기 때문에 0~4294967295의 값을 갖습니다.

short - 2바이트이며 -32768~32767이 값을 갖습니다.

unsigned short - 2바이트이며 0~65535의 값을 갖습니다.

long - 4바이트이며 -2147483648 ~ 2147483647의 값을 갖습니다

unsigned long - 4바이트이며, 부호가 없기 때문에 0~4294967295의 값을 갖습니다.

 

 

실제 자료형의 크기는 사용되는 시스템과 컴파일러에 따라서 달라질 수 있습니다. 예를 들어, int형과 long형은 같은 4바이트입니다. 하지만 32비트 시스템에서는 둘 다 32bit로 쓰이지만 64비트 시스템으로 옮겨간다면 long형은 64bit로 사용됩니다. C언어의 sizeof 함수를 사용하여 알 수 있습니다.

 

 

실수형(floating-point)

표준 실수형의 크기 및 범위 입니다. float double, long double형이 있습니다. 실수형이지만 부동소수점(floating)이라는 말이 있습니다. 컴퓨터에서 실수를 표시하는 방법으로, 소수점의 위치를 고정시키지 않으며 가수와 지수를 사용하여 실수를 표현한다. 가수는 유효숫자를 나타내며 지수는 소수점의 위치를 나타냅니다.

 

부동 소수점은 기존의 고정 소수점 방식보다 아주 크거나 작은 수를 나타낼 수 있어, 과학 분야로 응용되어 사용됩니다. 또한 메모리의 효율성이 높으며 음수의 표현이 간단하지만, 하드웨어의 비용이 증가하고 고정 소수점 방식에 비해 연산 속도가 느리며 유효숫자인 가수의 자릿수가 정해져 있습니다.

 

float - 4바이트이며, 범위는 1.2E-38 ~ 3.4E+38입니다. 소수점 이하 6자리까지 나타낼 수 있습니다.

double - 8바이트이며, 범위는 2.3E-308 ~ 1.7E+308입니다. 소수점 이하 15자리까지 나타낼 수 있습니다.

long double - 10바이트이며, 범위 3.4E-4932 ~ 1.1E+4932 입니다. 소수점 이하 19자리까지 나타낼 수 있습니다.

 

 

Void

void의 뜻은 비어있는 공간 혹은 비어있다 입니다. 비어있는 공간이라는 뜻과 같이 void형은 타입이 없다는 것을 나타냅니다. 함수에 대한 이야기를 할 때 더 자세히 다루도록 하겠습니다. 앞으로 비슷한 포스팅을 여러 가지 할 것입니다. 뒤의 내용과 이어서 본다면 이해가 가실 것이라고 생각합니다.

댓글