강좌 & 팁
함수의 원형
#include <stdio.h>
int calc_plus(int n1, int n2);
int main ()
{
int sum_number;
int num1 = 3;
int num2 = 6;
sum_number = calc_plus(num1, num2);
printf ( "num1 + num2 = %d\n",sum_number);
return 0;
}
int calc_plus (int n1, int n2)
{
int value;
value = n1 + n2;
return value;
}
함수 선언문은 함수의 원형이라고 부르기도 한다.
예제의 함수
int calc_plus (int n1, int n2);
함수의 선언에서 함수의 반환자료형과 함수의 이름, 그리고 인수의 이름과 자료형이 명시된다.
함수의 선언은 컴파일러에게 함수의 존재를 알려주고 필요한 메모리 공간을 할당한다.
함수의 선언에서 함수가 인수를 갖지 않을 경우나 반환값이 없을 경우는 void 형으로 표시한다.
void calc_plus ( void); 는 다음과 같이 적을 수도 있다.
void calc_plus ();
예제에서 calc_plus() 함수가 main() 함수 이전에 선언된 이유는 main()함수에게 calc_plus() 자신의 존재를 알리기 위해서 이다.
함수가 일단 선언되면 함수의 정의가 뒤에 나오더라도 다른 함수들에게 존재가 인지된다. 호출자 함수는 이미 선언되어 있거나 정의된 함수만 호출할 수 있으므로 main 함수의 앞에 선언하는 것이다.
함수의 원형이오고 main() 함수 뒤에 함수의 정의가 왔다. 함수의 원형 대신에 함수의 정의만 main() 함수 앞에 오면 함수를 사용하는데 문제가 없다.
함수의 지역변수
예제에서 num1, num2 는 main()함수에서 선언된 변수이고, value 는 calc_plus() 함수 내에서 선언된 변수이다. 이들은 각기 선언된 함수 내에서만 유효하다. calc_plus() 내에서 선언된 value 변수는 main() 함수에서 보이지 않는다. main()함수내에서 value 변수를 사용하면 컴파일 오류가 발생한다.
이렇게 변수의 통용범위를 변수의 유효범위라고 한다. 이와같이 함수 내에서 선언된 변수를 그 함수의 지역변수 하고 한다.
value는 calc_plus() 함수의 지역변수이다. 함수의 지역변수는 함수의 실행이 시작될 때 생성되어 함수의 실행이 끝나면 소멸한다. 이것을 변수의 존재기간이라고 한다.
다음 예제는 같은 이름의 지역변수가 두 함수에서 사용되는 프로그램의 예이다.
#include <stdio.h>
int plus( int first, int second)
{
int result;
result = first + second;
return result;
}
int minus (int first, int second)
{
int result;
result = first + second;
return result;
}
int main ()
{
int result;
result = plus ( 10,20);
printf( " result plus = %d\n",result);
result = minus ( 30,20);
printf( " result minus = %d\n",result);
return 0;
}
main()함수와, plus()함수, minus().함수에서 선언된 지역변수 result 는 이름은 같지만 서로 무관하다. 변수 result는 선언된 함수 내에서만 통용된다.
마찬가지로 plus(), minus()함수의 인수로 선언된 first 와 second 도 서로 무관하게 작용한다.