티스토리 뷰

본 포스팅은 렉토피아(http://www.lectopia.com

정혜경의 C언어 & 기초 자료구조 강의를 수강하는 수강생이 올린 질문글을 토대로 작성하였습니다.


질문 내용 :

1.과제도중에 함수정의를하는데 void가 아니라 int, float 형으로 함수정의를해보니 return값을 반환하라고하는데 void는 return값을 반환해줄필요가없는데 상수형들은 반환값을 줘야 하는건가요?? 
void함수는 값이없어서 return값이 없다고하셨는데int함수나 float함수처럼 값이 있는함수는 결과값이 나오기때문에 반환을 해줘야하는것인지가 궁금합니다. 

2. 함수의 3요소가 선언부 호출부 정의부라고 하셨는데 호출부를 굳이 만들지않고 호출부쪽에 바로 정의해버려도 상관이없는건가요?


답변 :

1. 함수 선언시에 가장 앞쪽에 함수의 반환형태를 지정해주게 되는데요. 말씀 하셨듯이 반환형이 void라면 아무것도 반환하지 않아도 되고, int형이나 float형이라면 그에 알맞는 데이터를 반환하시면 되겠습니다.

감은 잡으셨으나 아직 개념이 정확하게 자리잡히지 않은듯 한데, 이해를 위해서 int 형 값을 반환하는 함수를 예제로 보여드리겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int input();
 
int main()
{
    int num;
    num = input();
    printf("입력받은 정수값은 %d 입니다.\n",num);
 
    return 0;
}
 
int input()
{
    int num;
    printf("정수형 값을 입력하세요 : ");
    scanf("%d",&num);
    
    return num;
}
cs

함수가 데이터를 반환하는것은 함수의 사용목적과 관계가 있겠죠? 쉽게 이야기해서 위 예제의 input 함수는 정수값을 입력받기 위해서 만들어진 함수입니다. 앞으로 과제를 하면서 많은 함수를 만들어보면서 감을 잡으시길 바랄게요.

2. 호출부를 만들지 않고 호출부 자리에 함수를 정의해도 프로그램은 동작합니다. 그러나 전체적인 프로그램의 가독성및 관리를 위해서 선언과 정의를 분리할 필요가 있습니다. 나중에 프로젝트를 진행하거나 C++의 클래스개념을 공부하면서 더욱 자세히 알게 될 내용이지만, 함수나 변수의 선언부만 모아놓은 헤더라는 파일이 존재합니다 filename.h 와 같은식으로 .h의 확장자를 가지고 있습니다.

따라서 해당 프로젝트(프로그램)에 어떤 함수가 있는지 한눈에 보려면 헤더파일을 열어보면 되는거죠.
다만 함수의 길이가 3줄정도로 매우 짧은경우에는 선언부분에 정의를 하기도 해요 이러한 함수를 inline 함수라고 하고, 매크로와 비슷하게 동작한다고 보시면 되겠습니다.

아무튼 말씀드렸다시피, 선언부 자리에서 정의를 해도 프로그램은 동작하나 권장하고 싶지 않은 부분입니다. 배운대로 선언-호출-정의 순으로 코딩하는게 좋을것 같습니다.


강의 초반인데 inline이나 class 개념까지 들먹여서 더욱 머리아프게 한건 아닌지 모르겠으나 마지막 한줄만 보시고 직접 해보면서 경험으로 느끼는게 좋을것같아요 ^^

'개발노트 > 질문과 답변' 카테고리의 다른 글

Q&A : 링크에러 발생시 해결방법  (0) 2015.07.08
Q&A : 함수의 반환값  (0) 2015.07.02
Q&A : Call by pointer 란?  (0) 2015.07.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함