인프런 커뮤니티 질문&답변

luki님의 프로필 이미지
luki

작성한 질문수

홍정모의 따라하며 배우는 C언어

2.9 함수 만들기

해결된 질문

작성

·

12

1

1분 30초에 printf가 출력은 맞는데, 여기서 받아와서 추가로 하는 작업이 없으니 가정으로 그냥 없다고 하신걸까요?

그리고,

2분1초에 출력으로 받을게 없으니까 출력 받는 void 라고 쓴다고 하셨는데,

여기서 출력으로 받을게 없다는것이 어떤건가요?

답변 2

1

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

Q. 1분 30초에 printf가 출력은 맞는데, 여기서 받아와서 추가로 하는 작업이 없으니 가정으로 그냥 없다고 하신걸까요?

: '함수의 출력' 과 'printf() 의 기능인 화면에 글자를 출력하는 것' 을 혼동하신 것 같습니다.

printf() 함수는 '화면에 글자를 출력' 하는 기능을 합니다.
이 때, 이 기능을 수행하는 '함수' say_hello() 의 관점에서 생각해보면,
단순히, printf("Hello, World!\n"); 라는 기능을 수행하고 추가로 진행하는 작업이 없으므로
'함수의 입력과 출력' 이 없다고 가정하였던 것입니다.

출력이 없는 함수는 문법적으로 반환형에 무치형(void)을 사용하고, 입력 또한 없는 함수이므로 매개 변수에 void 를 명시합니다.
최종적으로 say_hello() 함수는 다음과 같이 printf("Hello, World!\n") 를 통해 화면에 글자를 출력하는 기능을 갖는 함수가 됩니다.

void say_hello(void) // 반환형 void, 매개 변수 void
{
  printf("Hello, World!\n");
}

 

혹시 이해가 어려우시다면, 강의 2.6 printf() 함수의 기본적인 사용법1:45 부분 교수님 설명과 그림을 참고해보시면 바로 이해가 쉽게 되실 것입니다.

 

Q. 2분1초에 출력으로 받을게 없으니까 출력 받는 void 라고 쓴다고 하셨는데, 여기서 출력으로 받을게 없다는것이 어떤건가요?
: 위 질문 답변의 내용과 같은 맥락에서, 함수의 출력(반환하는 것)이 없는 상황을 의미합니다.
위의 void say_hello(void) 함수처럼 단순하게, 함수 내부에서 기능을 수행하는 경우입니다.

 

간단하게 추가 설명을 드려보면, C언어는 함수의 출력(반환)과 입력에 대해서 데이터의 자료형을 명시해주어야 합니다.
(자료형에 대해서는 이전 강의 2.4 자료형이 필요한 이유 를 참고해보셔도 좋고, 이어지는 섹션 4 데이터와 C언어 에서도 자세하게 학습하시게 됩니다.)

예를 들어, 정수(integer)를 출력(반환)하는 함수의 경우에는 다음과 같이 작성됩니다.

int doSomething(void) // 함수의 출력 - 정수, 입력 - 없음
{
   return 2; // 함수가 출력하는 것은 정수 자료형의 2
}

int doSomething(int i) // 함수의 출력(반환) - 정수, 입력 - 정수
{
   return i + 2; // i 라는 정수 자료형 데이터를 입력받아 함수가 반환(출력)하는 것은 정수 자료형의 입력값 + 2 
}

 

곧 이어서 자세히 학습하게 되실 내용이니,
'함수의 출력' 과 '화면에 글자를 출력' 하는 것의 차이점, 그리고 함수가 출력하거나 함수에 입력하는 것이 없을 때 에는 void 를 사용한다는 것 정도만 이해해두시고 학습을 이어나가시는 것을 추천드립니다.

0

안녕하세요, 인프런 AI 인턴입니다. luki님!

질문 주신 내용을 기반으로 몇 가지 관련된 답변을 안내 드리겠습니다. C 언어에서 printf 함수는 지금 표현된 대로 단순히 콘솔에 출력을 하는 역할만 하게 됩니다. 출력된 결과를 프로그램 내에서 사용하기 위해 따로 값을 반환하지 않기 때문에 void로 표현합니다. void는 함수가 값을 반환하지 않는다는 의미로 사용됩니다.

아래 기존 질문과 답변을 참고하셔서 더 깊이 이해하실 수 있도록 도와드리겠습니다:

  1. 질문 제목: 2.9함수만들기_3:35초부터~

    • 요약: main 함수에 say_hello()를 사용하면서 인자 없이 사용할 때 void를 추가했을 때의 에러 원인은 void는 인자를 받지 않는다는 선언이기에 호출부에서는 사용되지 않기 때문입니다.
  2. 질문 제목: scanf 리턴값 받을 수 있다는걸 모르고 삽질만 2시간..

    • 요약: scanf 함수의 반환값을 이용하여 사용자 입력을 받을 때, 리턴값을 활용하여 작성한 코드의 디버깅 사례입니다.

이 두 답변이 C 프로그래밍에서 함수의 반환 타입과 관련하여 좀 더 이해하시는데 도움을 줄 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

luki님의 프로필 이미지
luki

작성한 질문수

질문하기