컴퓨터 프로그래밍/C

C언어 함수

나노콛 2019. 7. 23. 10:40

함수의 기본 구조

반환형 함수명 인자 
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;
}
// 함수 호출시 외부의 값을 함수내부로 가지고(복사) 오기 위해서
// 인자를 받는 형태로 변수를 생성