132쪽 47번 문제를 풀다가
만약에 prnt 함수에서 리턴값을 준다면 어떤 결과가 나올까 궁금했습니다
제가 예상한 첫번째 결과는 prnt 함수에서 while반복문의 첫번째 리턴값만 출력되는것
두번째 결과는 prnt 함수에서 반복문 횟수만큼의 결과 값 추이가 모두 출력되는 것
이었습니다
그래서 자바는 아니지만 C언어로 제가 응용해본 결과
#include <stdio.h>
prnt(int *a, int *b, int *c); // 리턴값을 주고자 void 삭제
int main()
{
int a=0, b=5, c=0;
prnt(&a,&b,&c);
printf("%d, %d, %d\n", a, b, c);
}
prnt(x, y, z) // 리턴값을 주고자 void 삭제
int *x, *y, *z;
{while (*x < *y){
++*x;
*z = *z + *x;
prnt(x,y,z);
return (x,y,z);
}
}
으로 코딩하고 실행해봤는데
여전히 결과 값이
5, 5, 10 으로 나오면서
1>------ 빌드 시작: 프로젝트: codingpractice, 구성: Debug Win32 ------
1> practice1.c
1>d:\코딩연습\codingpractice\codingpractice\practice1.c(16): warning C4047: 'return' : 'int'의 간접 참조 수준이 'int *'과(와) 다릅니다.
1>d:\코딩연습\codingpractice\codingpractice\practice1.c(18): warning C4715: 'prnt' : 모든 제어 경로에서 값을 반환하지는 않습니다.
1> codingpractice.vcxproj -> D:\코딩연습\codingpractice\Debug\codingpractice.exe
========== 빌드: 성공 1, 실패 0, 최신 0, 생략 0 ==========
이렇게 빌드 과정이 나왔습니다
간접참조수준이 다르다는 의미가 무엇인지 잘 모르겠고 모든 제어 경로에서 갑을 반호나하지 않는다는데
이게 무슨말인지 모르겠습니다 ㅜㅜ
안녕하세요 길벗수험서 운영팀입니다.
먼저 문제 47번은 반환값이 없는 사용자 정의 함수입니다.
1. prnt 앞에 void를 붙여주세요. (초기 선언부, 정의부 2군데)
2. return(x,y,z); 를 삭제해주세요.
void가 없으면 기본적으로 int를 반환하는 사용자 정의 함수로 판단하여 참조 관련 warning이 뜰 수 있습니다.
그것 외에는 별다른 오류는 발견하지 못했습니다.
위의 사항 수정후 다시 한 번 실행해보세요.
행복한 하루되세요 :)
-
관리자2019-03-12 10:58:38
안녕하세요 길벗수험서 운영팀입니다.
먼저 문제 47번은 반환값이 없는 사용자 정의 함수입니다.
1. prnt 앞에 void를 붙여주세요. (초기 선언부, 정의부 2군데)
2. return(x,y,z); 를 삭제해주세요.
void가 없으면 기본적으로 int를 반환하는 사용자 정의 함수로 판단하여 참조 관련 warning이 뜰 수 있습니다.
그것 외에는 별다른 오류는 발견하지 못했습니다.
위의 사항 수정후 다시 한 번 실행해보세요.
행복한 하루되세요 :)