본문 바로가기

프로그래밍/C Lang

C언어 강좌 :: 03. C언어의 기본 구조


이번 강좌에서는...


이번 강좌에서는 간단한 문자 출력 프로그램을 작성해보며 C언어의 대략적인 구조와 몇가지 개념에 대해서 알아보도록 하겠습니다.


목차

  • 코드를 작성하자
  • 코드를 실행하자
  • 코드의 실행흐름
  • 코드 분석
  • 함수
  • 시작점, main함수



코드 작성해보기


아래 예시 코드를 main.c 소스파일에 그대로 작성해주세요.


main.c

#include <stdio.h>


int main()

{

printf("hello world\n");

return 0;

}


위 코드를 한 글자도 빠짐없이 그대로 소스파일 내부에 작성하세요. 제대로 작성했다면 아래와 같은 화면일 것입니다.





코드 실행해보기


C언어로 작성된 코드를 실행시키기 위해서는 컴파일 과정이 필요합니다. 비쥬얼 스튜디오에서는 컴파일을 위한 여러 단축키를 제공하고 있는데, 그 중에서 가장 편리한 방법은 단축키 Ctrl + F5를 누르는 것입니다. Ctrl + F5를 눌러 컴파일을 진행하게 되면 다음과 같이 검은 화면 하나가 뜨게 됩니다.



이 검은 화면창은 콘솔창 혹은 커맨드창이라고 부릅니다. 우리가 지금까지 작성한 프로그램은 이 검은 창에 hello world라는 문장을 출력하는 프로그램이었습니다.




코드의 실행흐름


여러분들이 작성한 코드는 기본적으로 위에서 아래로 순차적으로 수행됩니다.


  • 실행흐름을 바꾸는 특별한 상황이 아니라면 코드는 위에서 아래로 실행됩니다.
  • 맨 처음 실행되는 명령문은 main 함수의 맨 첫번째 명령문입니다.




코드 분석


코드를 한줄한줄 전부 분석해보도록 하겠습니다.


1   #include <stdio.h>


기호 # 으로 시작되는 코드는 전처리문이라고 불리는 특수한 코드입니다. 전처리문은 전처리기라는 프로그램이 처리하게 되는데, 위 코드는 전처리기에게 "stdio.h라는 파일을 찾아서 그 내용을 이 소스파일에 복사시켜라"라는 명령을 내립니다.


그렇다면 왜? stdio.h라는 파일의 내용을 이 소스파일에 복사시키는 것일까요? 그 이유는 간단합니다. 이 프로그램의 어떤 코드를 실행하기 위한 정보가 stdio.h파일에 적혀있기 때문이죠. 그 코드가 무엇인지는 아래에서 알려드리겠습니다.


3    int main()

4    {

...

7    }


위 int main()과 중괄호는 한 쌍을 이루며 main이라는 이름의 함수를 정의하는 코드입니다. 중괄호는 함수의 몸체를 의미합니다.


5    printf("hello world\n");


위 코드는 main함수의 몸체에 포함되어있으며 printf라는 이름의 함수를 호출하는 코드입니다. c언어에서는 함수를 호출할 때, 함수의 이름과 소괄호가 필요합니다. 위 코드는 "printf함수를 호출하며, hello world\n라는 문장을 인수로 전달하라"라는 명령을 내립니다.


이 printf함수를 호출하기 위해서는 stdio.h파일의 내용이 필요합니다. 함수를 호출하기 위해서는 함수에 대한 정의가 이미 되있어야 하는데, 우리는 printf라는 이름의 함수를 정의하지 않았습니다. 그럼에도 불구하고 printf함수를 사용할 수 있는 이유는 stdio.h파일 내부에 printf함수에 대한 정보가 적혀있기 때문입니다.


6    return 0;


return은 함수를 종료시킬 때 사용하는 코드입니다. return 뒤에 어떠한 값이 작성되어있으면 함수가 종료되면서 해당 값을 호출한 곳에 반환합니다.




명령문의 이해


명령문(statement)은 c언어의 논리적인 실행 단위입니다. 한 명령문이 수행되는 동안 다른 명령문이 수행될 수 없으며 명령문들은 순차적으로 수행되어집니다.


각각의 명령문은 세미콜론으로 구분되어 집니다. 세미콜론은 마치 문장의 마침표 역할을 해주는 셈입니다. 우리가 지금까지 작성한 명령문들은 전부 세미콜론으로 끝난다는 것을 확인할 수 있습니다.




함수


함수(function)는 프로그램의 기본 단위입니다. 함수는 어떠한 목적을 달성하기 위해 작성되는데, 그 목적을 달성하기 위해서 함수의 몸체에 명령문이 작성됩니다.

함수는 어떠한 결과를 얻어내기 위해 호출되고 실행흐름을 획득한 후 명령문을 실행합니다. 실행을 완료하였다면 다시 호출한 위치로 실행흐름을 반환합니다. 필요할 경우 결괏값도 반환하게 됩니다.


나중에 자세히 알아볼 것이지만 함수를 사용하면 많은 장점이 있습니다.

  • 코드를 재사용할 수 있다.
  • 코드를 구조적으로 작성할 수 있다.
  • 코드의 오류를 빠르게 점검할 수 있다.




시작점, main함수


프로그램이 시작되면 컴퓨터 시스템은 프로그램 내부에 있는 main 함수를 찾아서 호출합니다. main함수가 없는 프로그램이란 없으며 main함수가 2개 이상인 프로그램도 없습니다.


main함수는 반드시 하나가 존재해야 하며 우리가 지금까지 작성했던 코드에도 main함수를 정의해놓았습니다.


int main()
{

...

}


여기서 int는 반환되는 값의 자료형을 의미하며 main은 함수의 이름을 의미합니다. 함수의 이름 옆에는 소괄호가 존재하는데 이곳에 함수를 호출할 때 같이 넘어올 인수를 정할 수 있습니다.

함수가 호출된 후 실행할 명령문들은 중괄호 { } 사이에 작성하며 함수가 호출될 때 명령문들이 실행됩니다.

함수가 중괄호 }에 도착하거나 명령문 return을 만나게 되면 함수는 종료되며 실행흐름을 호출한 위치에 반환합니다.




확인문제


Q. 'stdio.h' 파일을 소스파일에 포함시키지 않고 printf함수를 호출시킬 경우 오류가 나는 이유는 무엇인가?

A. printf함수를 호출하려면 함수에 대한 정보가 있어야 하기 때문에



Q. 프로그램 시작 시에 가장 먼저 호출되는 함수의 이름은?

A. main



Q. c언어로 작성된 코드를 프로그램으로 만들 때 필요한 과정은?

A. 컴파일 혹은 빌드