UNIT 60 함수 사용하기
C 언어로 프로그래밍을 하다 보면 들어가는 값만 바뀔 뿐 같은 코드가 계속 반복되는 경우가 많음. 같은 코드를 반복해서 작성하면 코드도 길어지고 중간에 실수할 가능성이 높아짐. C 언어에서는 함수(function)라는 기능을 제공하는데 특정 용도의 코드들을 한 곳에 모아놓은 것을 뜻함. 처음 한 번만 작성해놓으면 나중에 필요할 때 계속 불러 쓸 수 있음. 지금까지 사용했던 printf, scanf 등도 모두 C 언어에서 미리 만들어둔 함수임.
60.1 Hello, world! 출력 함수 만들기
반환값자료형 함수이름()
{
코드;
}
#include <stdio.h>
void hello() // 반환값이 없는 hello 함수 정의
{
printf("Hello, world!\n"); // Hello, world! 출력
}
int main()
{
hello(); // hello 함수 호출
return 0;
}
함수를 만들려면 main 함수 바깥에서 작성해야 함. 함수의 반환값 부분에 void를 적어주면 함수의 반환값이 없다는 뜻이 됨. 즉, void는 함수의 반환값이 없음을 나타낼 때와 포인터로 사용할 때의 의미가 다름.
main 함수와 hello 함수의 실행 순서
- main 함수 실행
- hello 함수 호출
- hello 함수 실행
- printf 함수 실행 및 "Hello world!" 출력
- hello 함수 종료
- 0 반환 및 main 함수 종료
참고 | 지역 변수
함수 안에 선언된 변수를 지역 변수라고 부르는데, 이 지역 변수의 특징은 함수가 끝나면 사라진다는 점임.
#include <stdio.h>
void hello() // 반환값이 없는 hello 함수 정의
{
int num1 = 10; //지역변수. hello 함수가 끝나면 사라짐
printf("Hello, %d", num1);
}
int main()
{
hello(); // hello 함수 호출
printf("%d", num1); //컴파일 에러 : hello 함수의 지역 변수 num1은 함수 hello 안에서만 사용할 수 있음
return 0;
}
60.2 함수 선언과 정의 분리하기
#include <stdio.h>
int main()
{
hello(); //hello 함수를 찾을 수 없음. 컴파일 에러
return 0;
}
void hello()
{
printf("Hello, world!\n");
}
C언어 컴파일러는 위에서부터 아래로 소스 코드를 해석. 따라서 어떤 함수가 있다는 사실을 알려주려면 함수 선언(function declaration)을 해주어야 함.
- 반환값자료형 함수이름();
함수 형태만 선언하기에 이를 함수 원형(funtion prototype)이라 부름.
#include <stdio.h>
void hello(); // 반환값이 없는 hello 함수 원형 선언
int main()
{
hello();
return 0;
}
void hello()
{
printf("Hello, world!\n");
}
함수 선언만 있고 정의가 없다면 링크 에러가 발생함.
참고 | 함수 원형과 함수 본체
함수 선언과 정의가 분리된 상태에서의 함수 선언 부분을 함수 원형(function prototype), 함수 정의(function definition)부분을 함수 헤더(function header)와 함수 본체(function body)라고 부름. 따로 함수 선언이 없을 때는 함수 저의와 선언이 동시에 이루어짐.
void hello(); // ← 함수 원형
void hello() // ← 함수 헤더
{
printf("Hello, world!\n");
}
// ↑ 함수 본체
#include <stdio.h>
void hello() // 함수 정의와 선언이 동시에 이루어짐
{
printf("Hello, world!\n");
}
int main()
{
hello(); // hello 함수 호출
return 0;
}
함수는 C언어의 핵심이라 할 수 있으니 문법과 사용 방법을 정확히 익히는 것이 좋음.
60.3 함수 디버깅하기
https://dojang.io/mod/page/view.php?id=809
C 언어 코딩 도장: 60.3 함수 디버깅하기
이번에는 함수 디버깅 방법을 알아보겠습니다. 다음 내용을 소스 코드 편집 창에 입력하세요. function.c #include void hello() // 반환값이 없는 hello 함수 정의 { printf("Hello, world!\n"); // Hello, world! 출력 }
dojang.io