1. 함수의 기본 형태
함수를 만드는 기본 형식은 다음과 같다.
리턴타입 함수이름(인수 목록)
{
함수의 본체
}
1) 리턴타입 : 함수가 리턴하는 값의 데이터형이며 함수의 작업 결과라고 할 수 있다.
2) 함수이름 : 함수의 이름이며 이 이름을 통해 함수를 호출한다.
3) 인수목록 : 함수를 호출할때 호출한 장소에서 넘겨주는 값이다.
2. 함수의 사용
예1) #include<stdio.h>
int sum(int num); //함수 선언
void main(void)
{
sum(10); //함수 호출
}
int sum(int num) //함수 정의
{
return num + 10;
}
예2) #include<stdio.h>
int sum(int num) //함수 선언 + 정의
{
return num + 10;
}
void main(void)
{
sum(10); //함수 호출
}
예3) #include<stdio.h>
void main(void)
{
sum(10);
}
int sum(int num)
{
return num + 10;
}
결과를 먼저 이야기 한다면 예1)이 올바른 코딩이고 예2)와 예3)은 잘못된 코드이다.
예3)은 컴파일 에러가 발생한다. 에러 메시지의 내용은 "sum함수가 선언되지 않았다."이
다. 그 이유는 c언어는 1패스 방식(코드를 순서대로 번역)이기 때문에 main()함수 이전에
sum()함수가 선언되지 않았기 때문이다. 따라서 예3)은 선언하지도 않은 함수를 호출한게
되어버린다.
예2)를 컴파일 하고 실행을 해보았다면 이게 왜 잘못된 코딩일까 의문이 들지도 모른다.
잘 실행되기 때문이다. 하지만 아래의 예4)를 본다면 왜 그런것인지 알 수 있을것이다.
예4) #include<stdio.h>
void sum1(int num1)
{
sum2(num1);
}
void sum2(int num2)
{
}
void main(void)
{
sum1(10);
}
아래의 프로그램을 실행하면 어떤일이 일어날까?
정답은 예3)과 같이 sum2()함수가 선언되지 않았기 때문이다. 그 이유는 위와 같다.
아래 예제를 더 보자.
예5) #include<stdio.h>
void sum1(int num1);
void sum2(int num2);
void main(void)
{
sum1(10);
}
void sum1(int num1)
{
sum2(num1);
}
void sum2(int num2)
{
}
예5)는 잘 만들어진 프로그램이다. 왜 이 프로그램은 에러가 나지 않는 것일까?
void sum1(int num1);
void sum2(int num2);
이 부분은 본격적인 프로그램의 실행 이전에 함수의 원형을 선언했기 때문이다.
선언부는 말 그대로 앞으로 사용한다고 선언하는 부분이기 때문에 순서와는 관계가 없다.
'기타 언어(C, PHP 등)' 카테고리의 다른 글
PHP explode - blank(white) space remove (0) | 2019.08.17 |
---|---|
PHP json string 형태로 넘어온 데이터 사용하기 (0) | 2019.08.17 |
[c/c++] scanf (0) | 2019.07.31 |
변수의 정의, 작성법칙 (0) | 2019.07.31 |
[linux] c++ boost install (0) | 2019.07.27 |