예제 Hello.c

#include <stdio.h>
int main(void)
{
     printf("Hello world! \n");
     return 0;

}

C언어의 기본단위인 '함수'의 이해

3x+4 = y

위 함수의 x에 2를 대입하면 y는 얼마인가? 10이다.

C언어에서는 x에 삽입되는 값을 '입력'하고, 그 결과로 얻게 되는 y의 값을 '출력'이라고 한다. 그리고 적절한 입력과 그에 따른 출력이 존재하는 것을 가리켜 '함수(function)'이라 한다. 

C언어에서 함수와 관련해서 사용되는 용어 몇 가지 정리 !

  • 함수의 정의 : 만들어진 함수, 실행이 가능한 함수를 일컬음
  • 함수의 호출 : 함수의 실행을 명령하는 행위
  • 인자의 전달 : 함수의 실행을 명령할 때 전달하는 입력 값 

 

예제 Hello.c에서의 함수는 어디에?

C프로그램은 함수로 시작해서 함수로 끝난다. 즉, 정해진 순서에 의해서 진행되는 함수의 호출이 바로 프로그램의 흐름이 되는 것이다. 그렇다면 제일 먼저 호출되는 함수는 무엇일까? 바로 main이라는 이름의 함수이다. 프로그램이 실행되자마자 컴퓨터는 main이라는 이름의 함수를 찾아서 호출을 한다. 따라서 C언어로 구현된 모든 프로그램에는 main이라는 이름의 함수가 정의되어야 한다. 

int main (void)
출력형태 함수이름 입력형태

위의 표가 의미하는 바는 다음과 같다.

출력의 형태가 int이고 입력의 형태가 void인 main이라는 이름의 함수

이렇듯 함수의 특성(입력형태, 출력형태 그리고 함수 이름)만 정의했다고 해서 함수가 되는 것은 아니다. 함수는 기능을 지녀야한다. 

맨위 예제의 중괄호 내부는 두 개의문장으로 이뤄져 있는데,  이 문장들은 순차적으로 실행이 된다. 즉, 중괄호내에 존재하는 문장은 그 수에 상관없이 위에서 아래로 순차적으로 실행이 된다. 

이렇게 함수의 기능을 정의하고 있는 영역을 가리켜 '함수의 몸체(body)'라 한다. 

함수 내에 존재하는 문장의 끝에는 세미콜론 문자 ; 을 붙여준다.

main의 함수의 몸체는 다음 두 문장으로 이뤄져 있다.

printf("Hello world! \n");

return 0;

각 문장 끝에는 세미콜론 문자 ; 가 붙어있다. 이렇듯 C언어는 문장의 끝을 표현하기 위해서 세미콜론을 사용한다. 그런데 모든 문장에 세미콜론이 붙는 것은 아니고 조건문이나 반복문 같은 컨트롤 문장에는 세미콜론이 붙지 않는다. 

표준 라이브러리와 printf 함수

main 함수의 몸체에는 다음 문장이 존재한다. 

printf("Hello world! \n");

함수의 호출문에서 소괄호 안에는 함소호출 시 전달할 인자정보를 표현한다. 그리고 C언어는 큰따옴표를 이용해서 문자열을 표현한다. 즉, 위 문장은 문자열 "Hello world! \n"을 인자로 전달하면서 printf라는 이름의 함수를 호출하는 문장이다.

printf 함수는 함수 호출 시 전달되는 문자열을 모니터에 출력하는 기능을 지닌다. 이러한 printf 함수는 직접 만들지 않아도 호출이 가능한, 기본적으로 제공되는 함수이다. 즉, 누구나 가져다 쓸 수 있도록 이미 만들어져 있는 함수이다. 이렇듯 제공되는 함수를 가리켜 '표준함수'라고 하고 , 표준함수들의 모임을 가리켜 '표준 라이브러리'라 한다.

현 시점에 어울리는 '헤더파일 선언의 필요성'에 대한 설명

printf 와 같은 표준함수의 호출을 위해서는 printf 함수와 관련 있는 '헤더파일 선언'이라는 것을 해야한다. 앞서 보인 예제의 헤더파일 선언은  #include <stdio.h> 이다.

이는 stdio.h라는 , 확장자가 .h로 끝나는 헤더파일을 포함하라는 의미의 선언이다.

  • printf 함수의 호출을 위해서는 stdio.h를 대상으로 헤더파일 선언을 해야 한다.
  • 헤더파일의 선언은 소스파일의 맨 앞 부분, main 함수 정의 이전에 와야 한다. 

return은 함수의 종료와 값의 전달(반환)이라는 두 가지 의미를 지닌다. 

main 함수의 다음 두 번째 문장은 return 0; 이다

이를 가리켜 return문이라 하는데, 이 문장이 지니는 두가지 의미는 다음과 같다.

  • 함수를 호출한 영역으로 값을 전달(반환)
  • 현재 실행중인 함수의 종료

따라서 예제 Hello.c에서는 이 문장을 실행하면서 main 함수를  호출한 영역으로 0을 전달한다. 그리고 함수를 빠져 나온다. 그런데 main 함수의 종료는 프로그램의 종료로 이어지기 때문에 결국 프로그램이 종료가 된다. 

 


참고- main 함수의 return문

main 함수의 마지막에서 0을 전달(반환)하는 이유는 무엇일까 ? 이값은 main 함수를 호출한 영역으로 전달된다. 그런데 main 함수는 프로그램이 시작되면 자동으로 호출되는 함수이다. 그리고 호출의 주체는 Window나 Linux와 같은 운영체제이다. 따라서 0은 운영체제에게 전달된다. 그리고 그 값은 프로그램의 종료상태를 알리는 용도로 사용된다. 보통 0은 정상적인 종료의 상황에서 전달하는 값이다. 반면 비정상적인 상황으로 인해서 종료될 때에는 일반적으로 0이 아닌 값을 전달한다.


 

문제 02-1 [예제 변경해보기]

문제1 : 다음과 같은 형태로 본인의 이름을 출력하는 프로그램을 작성해 보자. 단, printf 함수는 한 번만 호출해야 한다.

홍길동

홍 길 동

홍  길  동 

결과

문제2: 본인의 이름, 주소 그리고 전화번호를 모니터에 출력하는 프로그램을 작성해 보자. 더불어 이스케이프 시퀀스 \n 을 적절히 삽입해서 출력형태로 보기 좋게 다듬기 바란다. 총 3번 printf 함수를 호출해서 문제를 해결하자.

개인정보로 인하여 ㅎㅎ..
결과

+ Recent posts