함수의 기본 구조
반환형 함수명 인자
int Fuc(int a)
{
함수 내용(기능)
}
반환형은 함수가 리턴을 만나면서(종료) 반환할 자료 형태를 결정짓습니다.
함수명은 기능 구현에 대한 의미를 부여 한 단어로 표현하는 것이 좋습니다.
인자는 함수 내부에서 사용될 인자를 받아오는 변수의 선언입니다.
/* 함수 선언의 종류 */
1. int F1(); //반환형이 정수형인 함수 인자는 없다.
2. int F2(int num); //반환형이 정수형이고 인자는 정수형인자 1개를 필요로한다.
3. void F3(); //반환형이 void 즉 반환을 하지 않는다.
4. void F4(int num, char ch); //반환을 하지않고 정수형1개,문자형1개 인자를 필요로한다.
위의 내용은 단지 함수의 선언입니다.
함수 내용이 없기 때문에 선언만 한 경우 문제가 생깁니다.
#include <stdio.h>
int F1();
int F2(int num);
void F3();
void F4(int num, char ch);
int main(int argc, char const *argv[])
{
F1(); //함수 호출
return 0;
}
위의 같은 경우는 함수의 내용이 없습니다.
#include <stdio.h>
int main(int argc, char const *argv[])
{
F1();
return 0;
}
int F1();
int F2(int num);
void F3();
void F4(int num, char ch);
위의 경우는 함수의 내용도 없지만
F1() 함수에 대해 선언이 아래에 되어 있어서 아예 F1 함수를 찾지 못합니다.
#include <stdio.h>
void F1()
{
printf("함수 호출\n");
}
int main(int argc, char const *argv[])
{
F1();
return 0;
}
F1 함수가 main 함수 위에 존재하기 때문에 F1 함수를 이용할 수 있습니다.
#include <stdio.h>
int main(int argc, char const *argv[])
{
F1();
return 0;
}
void F1()
{
printf("함수 호출\n");
}
F1 함수의 정의가 main 함수 아래에 있기 때문에 F1 함수를 찾지 못합니다.
#include <stdio.h>
void F1();
int main(int argc, char const *argv[])
{
F1();
return 0;
}
void F1()
{
printf("함수 호출\n");
}
가장 위에서 F1 함수를 선언해주었기 때문에 F1 함수 호출이 잘 됩니다.
함수의 정의를 main 함수 위에 해도 되고
함수의 정의는 아래에 선언을 main 함수 위에 해도 상관없습니다.
그러나 사용자 정의 함수가 많아지게 된다면
함수의 선언을 상단에 하고 정의를 아래에 쓰는 게 소스 파악하기에 도움이 됩니다.
함수 정의 시 인자에 대해서
int F1(int num, char ch);
이렇게 선언 한 경우
함수를 호출하기 위해서
형에 맞는 인자를 개수에 맞게 사용해야 합니다.
int main()
{
F1(2,'a');
}
int main()
{
int a=10;
char ch = 'a';
F1(a,ch); // 해당 형에 맞는 변수라도 상관없다.
}
함수에 필요한 인자를 넣을 때는
함수에서 선언한 형태의 순서대로 넣어야 합니다.
함수의 필요한 인자는 함수 내부에서 쓸 변수의 선언입니다.
void F1(int a, char c) //선언(정의)시
{
}
F1(20,'a');// 사용시
F1(20, 'a');에서 함수의 정의에서 인자 순서대로 값을 넣습니다.
이 값이 함수로 가서
함수의 인자로 만든 변수에게 복사를 하는 개념입니다.
결론은 함수를 정의할 때 필요한 인자는
함수 내부에서 생성하는 변수입니다.
void F1(int a, char c) //이것은 결국
{
}
void F1() //와 같은 의미다.
{
int a;
char c;
}
// 함수 호출시 외부의 값을 함수내부로 가지고(복사) 오기 위해서
// 인자를 받는 형태로 변수를 생성
'컴퓨터 프로그래밍 > C' 카테고리의 다른 글
C언어 포인터(Ponter) / 다중 포인터 (2) | 2019.07.23 |
---|---|
C언어 Call by Value / Call by Address (0) | 2019.07.23 |
C언어 파일 입출력 (0) | 2019.07.23 |
C언어 구조체 (구조체 포인터 / typedef) (0) | 2019.07.23 |
C언어 변수 (지역/전역변수) (0) | 2019.07.23 |