자. 여러분 어느것을 공부하든간에 공부를 할 때에는 가장 기초가 되는 단계가 있습니다. C언어에서는 Hello World가 바로 그 예이다. 이 Hello World는 그냥 창에다 Hello World라는 문장을 적게 만드는... 다소 바보스러운 프로그램이다. 그러나 일단 이 프로그램을 코딩해 봄으로서 C언어의 가장 기초가 되는 구성을 알아볼 수 있을 것이다.
Hello.c
(위 코드는 VirtualBox를 이용해 CentOS에서 작성한 소스입니다.)
무려 빈줄 1줄을 포함하여 8줄밖에 안되는 프로그램이다. 일단 이 프로그램을 짜서 실행을 해 보자. 왜냐하면 이 프로그램을 구동해봄으로서 C언어가 어떤 느낌의 언어인지를 알 수 있고, 기본적인 작성 방법을 익힐 수 있기 때문이다.
먼저 이 프로그램을 크게 4부분으로 나누어서 생각해 보도록 하자. 먼저 함수의 형태를, 다음으로 헤더파일에 대하여 그리고 마지막으로 프로그램을 작성할때 중요한 주석 작성에 대해서 간략하게나 알아보게 될 것이다.
1. 함수의 형태
이 프로그램은 main이라는 단 하나의 함수로 구성되어 있다. 이 main이라는 함수는 콘솔기반의 C언어에서 정말 중요한 역할을 하게 되는데 코딩을 통해 작성된 실행파일을 구동하면 이 main함수를 처음부터 끝까지 수행하고 이 메인함수가 끝남과 동시에 프로그램을 끝내기 때문이다. 따라서 C언어로 작성된 프로그램은 main함수로 시작해서 main함수로 끝나는 것이 보통이다.
초등학교 중학교정도의 수학을 공부한 사람이라면 응당 함수가 어떤 개념인지를 알 것이다.
그래도 잘 모르는 사람을 위하여 살짝 사전적 정의를 찾아보자.
<수학> 두 개의 변수 x, y 사이에서, x가 일정한 범위 내에서 값이 변하는 데 따라서 y의 값이 종속적으로 정해질 때, x에 대하여 y 이르는 말. y가 x의 함수라는 것은 y=f(x)로 표시한다. ≒따름수.
즉 입력값인 x에 따라 출력값 y가 변하는 녀석을 함수라고 한다. 프로그래밍에서의 함수도 이와 같다. 다만 입력값이나 출력값이 없어도 함수가 작동한다는 것과 함수의 결과만이 프로그램 전체에 영향을 끼치는 것이 아니라 그 과정적인 부분에서도 프로그래밍 방법에 따라 프로그램 전체에 영향을 끼친다는 점 정도를 다르다고 할 수 있겠다.
일단 기본적인 함수의 형태는 이러하다.
[반환형] 함수의이름([입력형])
{
//함수의 몸체
}
여기서 반환형과 입력형은 입력되어지는 Data의 Type을 의미하며 이 Type들은 이미 C언어에 의해서 정의되어 있다.
char : 1byte의 문자를 저장할 수 있는 자료형
int : 4bytes 크기의 정수를 저장할 수 있는 자료형
double : 8bytes 크기의 실수를 저장할 수 있는 자료형
위의 3개의 자료형은 C언어에서 가장 대중적으로 사용하는 자료형들로 이 외의 자료형에 대해서는 추후 다시 설명하도록 하겠다.
함수의 이름은 함수를 구분하게 도와주는 식별자이다. 함수는 이 이름을 이용해 호출을 하게 된다.
함수의 몸체는 함수를 사용할때 처리하는 프로세스적 알고리듬을 기입하는 부분이다. 예를 들어 위의 Hello.c 파일의 경우 main함수가 호출되면 printf라는 함수가 호출되게 되고 0이라는 숫자를 반환하면서 종료하게 된다.
이때 printf()의 호출, return등의 연산을 수행하는 모든 문장들의 뒤에는 ;(세미콜론)을 붙여 문장의 끝을 나타내게 된다. 그리고 return으로 반환되는 값은 수학적 함수에 비교하면 y에 비교할 수 있는 것으로 함수의 결과값을 반환하는 것이다.
(함수의 이름인 printf와는 달리 printf()는 printf함수라고 읽는다.)
이 외에도 함수의 선언과 정의, 함수의 호출등의 내용이 있지만 이는 추후 다른 장을 통해 따로 설명하도록 하겠다.
2. 헤더파일이란?
헤더파일이란 자주 쓰는 함수의 집합과도 같은 것이다.
우리가 프로그래밍한 Hello.c 파일에는 printf()라는 기입되는 함수가 사용되고 있다. 이 함수는 화면에 전달된 내용을 작성하는 함수로 이 프로그램을 수행을 했을 경우 다음과 같은 결과가 나오게 된다.
위의 그림과 같이 printf함수는 우리가 직접적으로 작성하지 않았지만 실제로 "Hello C World \n"이라는 인자값을 전달받아 출력하고 있다. 그렇다면 이 printf()는 어디에 작성되어 수행되어지고 있는 것일까? 이 함수는 바로 stdio.h라는 헤더파일에 작성되어 있고, #include <stdio.h> 라는 헤더파일 포함을 알리는 선언에 의해 프로그램에 속해 있어 printf()를 사용할 수 있게 되는 것이다.
이러한 헤더파일을 선언할때에는 한가지 주의해야 할 점이 있는데
헤더 파일의 포함을 알리는 선언은 프로그램 작성시에 가장 먼저 등장해야만 한다는 점이다.
(printf()에 대해서는 다음에 다시 설명하도록 하겠다.)
3. 주석의 작성
주석은 프로그램을 작성할때 해석을 다는 것으로 파일의 첫부분, 헤더파일과 전역변수 위, main을 제외한 각각의 함수 위에 다는것이 보편적인 방법이다.
주석처리된 부분은 컴파일 과정에서 컴파일러에 의해서 자체적으로 무시되어진다.
주석을 다는 방법은 크게 두가지 부분으로 나눌 수 있다. 여러줄 주석과 한줄 주석이 바로 그것이다.
여러줄 주석은 주석의 시작과 끝 사이의 모든 내용을 주석화 시키는 것이다.
ex)
/* 여기는 주석 부분입니다.*/
/*
이 주석은
여러줄에 걸쳐서도
사용이 가능합니다.
*/
위의 두가지 경우가 여러줄 주석을 이용한 방법이 되겠다. 반면에 한줄 주석은 //기호부터 그 있는 모든 글을 주석화한다.
ex)
이곳은 한 줄 주석부분에 포함되지 않습니다. //이곳은 한 줄 주석부분에 포함됩니다.
이곳은 한 줄 주석부분에 포함되지 않습니다.
오늘 작성한 Hello.c 파일에서는 여러줄 주석과 한줄 주석 두가지 방법의 주석이 모두 사용되었다. 이를 참고하는것도 한가지 방편이 될 것이다.
이 주석은 두가지를 섞어 사용할 수 있는데 단 여러줄 주석의 경우 중복하여 사용할 수는 없다.
ex)
/* (<- 주석의 시작 부분입니다.)
이곳은 주석에 포함됩니다.
//이부분은 주석에 포함됩니다.
/* (<- 이 주석의 시작 부분도 주석처리 되어버립니다.)
이곳은 주석에 포함됩니다.
//이부분은 주석에 포함됩니다.
*/ (<- 이 기호에 의해 주석이 마쳐집니다.)
이곳은 주석에 포함되지 않습니다.
//이부분은 주석에 포함됩니다.
*/ (<- 주석 여는 부분부분 없이 주석닫는부분만 있으므로 오류가 납니다.)
오늘은 Hello.c 파일을 통해서 C언어의 기본적인 부분을 살펴보았다. 컴퓨터 프로그램에 관한 지식이 없는 상태에서 이 프로그램을 보고 있으면 C언어라는 언어가 생각보다 복잡한 형식을 가지고 있는 언어라는 것을 알 수 있을 것이다. 그렇지만 포기하지 말자. 앞으로 C언어를 더 배우다보면 언젠가 "심심한데 C언어로 프로그램이나 한번 짜볼까?"라고 말하고 있는 자신의 모습을 볼 수 있을 테니까!