관리 메뉴

드럼치는 프로그래머

[C/C++] void 와 return에 대해서 본문

★─Programing/☆─C | C++

[C/C++] void 와 return에 대해서

드럼치는한동이 2009. 1. 29. 21:51

c언어 공부 시작한 초짜입니다

 

오늘 공부중 궁금한점이 생겼는데요

 

예를 들어 int main(void) 를 보면 int는 출력형이고 void는 입력형이라고 배웠는데요

 

int는 정수형을 지정하며 void는 비었다 라는 것을 뜻한다더라구요

 

그런데 int는 대체 무엇을 보고 정수형을 지정하는지 void는 어디에 쓰이는지 알수가 없더군요

 

그래서 다른함수도 찾아봤습니다만..

 

void Result_Print(int val)

{

printf("~",val);

printf("~");

}

 

int input(void)

{

int input;

scanf("%d", &input);

return input;   //<- 대체 무엇을 의미하는지.. void형으로 출력한다 라는게 없으면 항상 return이 있던데   이  번엔 0아니라 input 이군요..제가 지금까지 배울때는  모두 0 이었는데 말이죠. 왜그럴까요?

 

void intro(void)  // void가 입력 출력 모두에 쓰인것인데요..--;도통이해 할수없네요..

{

printf("~");

printf("~");

}

 

 

도와주시면 정말 고맙겠어요 ;ㅁ;

신고

의견 쓰기

답변하시면 내공 10점을, 답변이 채택되면 내공 25점을 드립니다. >나도 답변하기

현재 답변들 4

등록순 | 최신순

re: c언어 질문드립니다//void 와 return에 대해서

optinice

답변채택률 78.8%

2008.01.24 12:58

잘못이해하시고 계시네요

 

int main(void)

 

앞의 int는 main함수에서 반환되는 데이터의 자료형이 정수형이라는 것을 의미합니다.

 

void main(void)

 

반환되는 데이터가 없는 main함수를 의미하는것이죠

 

(void) 이 부분은 함수에 들어가는 데이터를 의미하는데 void로 선언되어 있기 때문에

 

함수에 입력되는 데이터가 없다고 보시면 됩니다.

 

마찬가지로 다른 예를 보면

 

int main(int n) 으로 사용할 경우  들어가는 데이터 형은 정수형이고 그 변수는 n을 의미하는것입니다.

 

위 함수를 다시 설명하면

 

정수형으로 입력받는 main함수의 반환형은 정수형이다.. 라고 표현하시면 되겠습니다

 

이해가 좀 되셨는지요?

출처 : 내머리

신고

의견 쓰기

re: c언어 질문드립니다//void 와 return에 대해서

misstelee

답변채택률 81.1%

2008.01.24 13:14

C언어는 주로 함수(fuction)로 돌아갑니다.

함수로 어떤 입력값을 넣으면

함수에서는 어떤 일을 하고

함수로 부터 어떤 값을 얻을 수 있죠.

 

입력값과 출력값은 없을 수도 있습니다.

그냥 함수가 입출력값 없이 일만 할  수도 있다는 겁니다.

 

예를 들어

int Sum(int a, int b)

{

  int c;

  c = a+b;

  return c;

}

이 함수는 정수형 숫자 2개를 받아 그 합을 구해주는 함수입니다.

a와 b가 입력값이 되겠죠. 이런 입력값을 파라미터(parameter)라고 합니다.

a,b는 모두 int로 정수형이고요.

int는 정수를 담을 수 있는 일종의 자료형입니다.

이건 변수 또는 자료형을 참고하세요.

입력과 출력의 자료형은 함수를 만드는 사람이 정하는 겁니다.

 

함수 안에서 c 에 a와 b의 합을 기록하고

그 합(c)을 출력합니다. 사실 이 경우 출력이라는 말은 안쓰고요.

보통 반환(return)한다고 말합니다. 반환값이라고 부르고요.

 

함수는 반환하는 값의 종류(자료형)를 정해줘야합니다.

이 경우는 int, 즉 정수형이겠죠.

지금까지 0만 보셨다고 했는데..0도 정수죠. 위에 c도 정수고요.

질문하신 부분에서 input변수도 역시 int형으로 정수이죠.

반환형을 int로 정해놓으면 int(정수)형을 반환하기만 하면 됩니다.

그게 0,1,2 같은 진짜정수이든..a,c,input같은 정수형 변수이든 상관없습니다.

 

이제 void에 대해서 말해보겠습니다.

위에서 말했듯이 함수는 입출력값을 생략할 수 있습니다.

질문에 있는 함수로 설명해보겠습니다.

 

void Result_Print(int val)

{

printf("~",val);

printf("~");

}

 

이 함수는 Result_Print 결과를 찍어라..그런 함수군요.

파라미터로 val을 받습니다. int로 정수형이군요.

함수 내부를 보면 printf로 그 val을 화면에 찍습니다.(출력한다는 표현은 보통 이 때 사용합니다. 화면에 출력)

이 함수의 역할은 거기까지입니다.

뭘 반환할 필요가 없죠.

그래서 반환값이 없으니 void라고 표현한겁니다.

 

이 함수를 볼까요?

void intro(void)

{

printf("~");

printf("~");

}

이 함수의 역할은 그냥 화면에 ~~라고 찍는 겁니다.

파라미터와 리턴값은 필요가 없습니다.

함수 만든사람이 그렇게 정의한 것이죠.

그래서 파라미터와 리턴값에 모두 void라고 넣은겁니다.

 

아무것도 반환할 게 없을 때 함수를 종료한다는 의미로

함수 끝에(또는 중간에) return; 만 넣기도 합니다.

"함수끝"이라는 의미죠.

 

어떻게 답변이 되었는지 모르겠네요.

더 궁금하신 것이 있으시면 쪽지 날려주세요

신고

의견 쓰기

re: c언어 질문드립니다//void 와 return에 대해서

mintycozy

답변채택률 81.7%

2008.01.24 13:16

 

 ㅇ_ㅇ 함수 자체에 대한 이해가 부족하군요.

 

 함수를 먼저 분석하면..

 

 (반환형) 함수명(입력형);

 

 으로 분류됩니다. 보면 어렵죠??

 

 int Result(int abc);

 

 요렇게 써봅시다.

 

 반환형은 int.. .. "형" 이라고 적혔으니.. (형님이 아닙니다.)

 타입(Type) 이지요.. int, float 처럼.. 자료형을 말하는 것입니다.

 

 함수명은 Result

 

 입력형은 int 이랍니다.

 함수의 기본 형태는 수학에서 왔지요

 

 y = f(x);

 

 많이 보셨죠? 이런 문장 말예요.

 함수도 같답니다. f() 는 함수명이 되고.. x는 입력형.

 y 는 반환형이 되는 것이랍니다.

 

 int Sum(int nCount);

 

 자.. 이렇다고 했을때.. 입력은 nCount 정수를 받습니다.

 1,2,3 이렇게 받겠지요. 그리고 Sum 함수 내부의 일을 합니다.

 함수명을 보아하니.. 주어진 입력 숫자만큼 더하겠군요.

 

 그리고 함수가 끝나면 결과값을 돌려줍니다.

 그 결과값의 형태가.. 정수형이라는 소리가 되지요.

 

 이렇게 돌려주는 값이 있을 경우에는 Return 으로 값을 돌려주지만

 없다면?? 돌려줄 필요가 없다면 말예요.. void를 쓰는 것이지요.

 

 가장 대표적인게 main 함수랍니다.

 main 함수는 돌려주는 값이 의미가 없습니다.

 

 때문에 void 로 많이 사용하지요.

 

 ㅇ_ㅇ 이제 좀 이해가 가셨는지 모르겠네요.

 하시다가 궁금한 점이 있다면 언제든 쪽지로 질문하세요. 

 

 

신고

의견 쓰기

re: c언어 질문드립니다//void 와 return에 대해서

llllo0

답변채택률 0%

2008.01.24 13:23

질문자의 설명대로 

int main(void)의 경우 int는 출력형이고, void는 입력형입니다.

여기에 대한 설명을 덧붙이자면

입력형이라는 뜻은 해당 함수(여기서는 main함수)를 실행시킬 때 입력받는 값의 데이터 형이고

출력형이라는 뜻은 해당 함수(여기서는 main함수)를 실행후 이 함수를 호출한 곳으로 어떤 값을 보내게 되는데 되돌려주는 값(return 값)의 데이터 형을 어떤 것으로 할 것이냐를 뜻합니다.

 

이해를 돕기 위해서 간단한 예제를 작성해 보겠습니다.

- - - - - 예제 1 - - - - -

void main(void)

{

a();

}

void a(void)

{

printf("aaa");

}

- - - - - - - - - - - - - -

예제 1의 경우

main함수에서 a함수를 호출하였습니다.

a 함수를 호출할때 괄호안에 아무런 값도 넘겨주지 않았으며 어떤 값도 되돌려받지 않습니다.

이런 경우 a함수의 내용을 보면 아무런 값도 넘겨받지 않기 때문에 void형이며

aaa라는 값을 출력후 호출했던 함수로 되돌아가기만 하면 되므로 return값도 없습니다.

- - - - - 예제 2 - - - - -

void main(void)

{

a(5,3);

}

void a(int a, int b)

{

printf("a = %d, b = %d, a+b = %d", a, b, a+b);

}

- - - - - - - - - - - - - -

예제2의 경우

a함수는 두개의 정수값을 받습니다.

하지만 a와 b, a+b의 값만 출력 후 return합니다.

그러므로 입력값은 int 형이며, 출력형은 void입니다.

- - - - - 예제 3 - - - - -

void main(void)

{

printf("a = %d, b = %d, a+b = %d", 5, 3, a(5,3));

a(5,3);

}

int a(int a, int b)

{

return a+b;

}

- - - - - - - - - - - - - -

예제3의 경우

예제2처럼 int형 값을 입력값으로 받습니다.

하지만 return값은 a 와 b를 더한 값(정수값)을 되돌려줍니다.

그러므로 출력형은 int입니다.

 

정리하자면 입력값의 경우

함수를 실행함에 있어서

어떤 값을 넘겨받아야 하는 경우에는 해당 데이터형을 작성하고 (위의 예처럼 두 값을 더한다거나 하는 경우)

어떤 값을 받지 않고 어떤 일을 할 경우(단순 출력문 등) void를 사용합니다.

 

출력값의 경우

함수 실행후

어떤 결과를 넘겨 주어야 하는 경우 넘겨주고자 하는 데이터가 어떤 데이터인가에 따라 데이터형을 적어주면 되며

함수만 실행할 뿐 결과값을 넘겨주지 않을 경우 void를 작성하면 됩니다.

 

질문자님의 예제 중

void Result_Print(int val)함수는

void Result_Print(int val)

{

printf("~",val);       // printf("~%d~",val);형태이겠지요.

printf("~");

}

정수형으로 val을 입력받아서 출력 후 되돌아가기만 하면 되므로 출력형은 void 이며

 

int input(void)

{

int input;

scanf("%d", &input);

return input;

}

예제의 경우

input함수는 어떤 값을 받지 않습니다.

하지만 함수 처리중 scanf함수를 통해서 값을 입력받는데 이 값을 정수형으로 받습니다.(%d이므로 정수형)

그런 다음 호출한 함수에 input(정수형) 값을 되돌려줍니다.

 

이해가 되실는지...

 

[출처] http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10104&eid=c49a8z5tqZT7qw6GvHvBm4nAi4x45Dtj&qb=Vk9JRCBSRVRVUk4=&pid=fdeqUwoi5Thssv%2BCgO8sss--504751&sid=SQRklNIxBEkAADHaePI 


Comments