45 함수 사용하기
C 언어로 프로그래밍을 하다 보면 들어가는 값만 바뀔 뿐 같은 코드가 계속 반복되는 경우가 많습니다. 특히 같은 코드를 반복해서 작성하면 코드도 길어지고 중간에 실수할 가능성이 높아집니다.
C 언어에서는 함수(function)라는 기능을 제공하는데 특정 용도의 코드들을 한 곳에 모아놓은 것을 뜻합니다. 그래서 처음 한 번만 작성해놓으면 나중에 필요할 때 계속 불러 쓸 수 있습니다. 예를 들어 지금까지 사용했던 printf, scanf 등도 모두 C 언어에서 미리 만들어둔 함수입니다.
함수는 다양한 사용 방법이 있으므로 이제부터 각 유닛에서 함수의 사용법을 자세히 알아보겠습니다.
45.1 Hello, world! 출력 함수 만들기
함수를 정의하는 방법은 다음과 같이 반환값 자료형, 함수 이름, ( ) (괄호)순으로 적어준 뒤 { } (중괄호) 안에 원하는 코드를 작성하면 됩니다(함수 이름을 짓는 방법은 변수 이름을 짓는 방법과 같습니다).
반환값자료형 함수이름() { 코드; }
다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.
function.c
#include <stdio.h> void hello() // 반환값이 없는 hello 함수 정의 { printf("Hello, world!\n"); // Hello, world! 출력 } int main() { hello(); // hello 함수 호출 return 0; }
실행 결과
Hello, world!
이제 함수를 만들려면 main 함수 바깥에서 작성해야 합니다. 다음과 같이 main 함수 위에서 반환값의 자료형은 void, 이름은 hello인 함수를 정의했습니다. 그리고 중괄호 안에서 printf로 "Hello, world!" 문자열을 출력했습니다.
void hello() // 반환값이 없는 hello 함수 정의 { printf("Hello, world!\n"); // Hello, world! 출력 }
여기서 함수의 반환값 부분에 void를 적어주면 함수의 반환값이 없다는 뜻이 됩니다. 즉, void는 함수의 반환값이 없음을 나타낼 때와 포인터로 사용할 때의 의미가 다릅니다. 이 부분을 잘 기억해두세요.
함수를 만들었으니 사용을 해봐야겠죠? main 함수 안에서 hello();와 같이 함수 이름과 ()를 적어준 뒤 ; (세미콜론)을 붙이면 함수를 사용할 수 있습니다.
int main() { hello(); // hello 함수 호출 return 0; }
이렇게 함수를 사용하는 방법을 "함수를 호출(call)한다"라고 부르기도 합니다.
다음은 main 함수와 hello 함수의 실행 순서입니다.
- main 함수 실행
- hello 함수 호출
- hello 함수 실행
- printf 함수 실행 및 "Hello world!" 출력
- hello 함수 종료
- 0 반환 및 main 함수 종료
함수 안에 선언된 변수를 지역 변수라고 부르는데 이 지역 변수의 특징은 함수가 끝나면 사라진다는 점입니다.
void hello() { int num1 = 10; // 지역 변수. hello 함수가 끝나면 사라짐 printf("Hello, %d", num1); } int main() { hello(); printf("%d", num1); // 컴파일 에러: hello 함수의 지역 변수 num1은 // 함수 hello 안에서만 사용할 수 있음 return 0; }
hello 함수 안에 선언된 지역 변수 num1은 hello 함수 안에서만 사용할 수 있고, 함수 바깥에서는 사용할 수 없습니다. 자세한 내용은 '51.1 변수의 범위 알아보기'를 참조하세요.