본문 바로가기

C 언어/임베디드 C

함수의 정의

함수의 정의는 표제부와 함수몸체로 구성된다.

함수반환자료형 함수이름 (인수리스트) {명령문}

//실인수와 형식인수의 자료형이 일치하지 않을 경우
#include <stdio.h>

float average(short n1, short n2);
int main()
{
 int num1, num2;
 float avrg;

 printf("Please enter an integer : ");
 scanf("%d", &num1);
 printf("Please enter an integer : ");
 scanf("%d", &num2);
 avrg = average(num1, num2);
 printf("The average of %f and %f is %6.3f\n", num1, num2, avrg);
 return 0;
}

//두수의 평균 값을 산출하는 함수
float average(short n1, short n2)
{
 float avg;

 avg = (float)(n1 + n2) / 2;
 return(avg);
}

결과
Please enter an integer : 400000
Please enter an integer : 500000
The average of  0.000000 and -8752.000000 is 0.000

int num1, num2;
float average (short n1, short n2);
함수 호출부분 avrg = average (num1, num2);에서 실인수 num1과 num2는 int형이고 함수 정의 float average (short n1, short n2)의 형식인수는 short형이다. 실인수와 형식인수가 일치하지 않기 때문에 컴파일 결과에서 경고메시지(warning)가 출력된다.
결과에 main() 함수에서는 400000과 500000이 int형의 범위에 속하지만, average() 함수의 형식인수인 n1과 n2는 short형이므로 이  값들은 범위를 벗어난다. 그래서 잘못된 결과가 나온다.

경고메시지 출력하지 않게하려면
avrg = average(num1, num2);을 avrg = average((short)num1,(short) num2); 로 캐스팅

float average(int n1, int n2)는

float average(n1, n2)
int n1;
int n2;로 선언할 수도 있다.
ANCI C표준은 두 가지 형식을 다 인정한다.

'C 언어 > 임베디드 C' 카테고리의 다른 글

return문  (0) 2011.04.25
지역변수  (0) 2011.04.25
makefile 만들어보기  (0) 2011.04.21
두 함수에 문법적 오류는 없지만 실행 파일이 만들어지지 않는 경우  (0) 2011.04.20
구구단 출력하기  (0) 2011.04.19