오늘은 저번 실습에서 먼저 사용해본 함수에 대하여 알아본다.
추가로 헤더파일을 만들어서 사용하는 것도 해볼 것이다.
(잠깐 꿀팁
줄 여러개 탭 하나 줄이는법
쉬프트 탭 으로 한다. )
함수 알기
함수의 필요성을 알아본다
c 언어의 기본은 함수 이다
이건 파이썬류와 다르게 구분되는 큰 틀중 하나 이다
즉 함수기반 과 객체지향(oop) 기준의 프로그래밍 언어의 2개의 큰 틀중에
c언어는 함수 기반의 프로그래밍 언어라는 것이다.
함수의 집합을 라이브라리 (library)라 한다 (파이썬은 모듈이라 함)
이러한 라이브러리들은 자신이 자주사용하는 것들을 자신이 만들어서
함수로 만들어놓고 나중에 따로 불러오는것을 목적으로 만든다고 생각한다.
이러한 함수는 메인함수 보다 먼저 위에다가 선언하고 사용하는 방식이
가장 일반적이나, 만약 나중에 만들게 된다면 함수 헤더 (바디 말고)만 메인함수보다 앞에
선언해 두고 나중에 메인함수 밑에다가 선언한다(솔직히 이 방식이 더 깔끔할 수 있다.)
참고로 미리 헤더를 선언할때매개변수 자리에는 자료형만 위치해도 된다.
함수를 정의하는 방법
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
반환형 함수이름 (매개변수 이건 함수가 실행될때 필요한 값)
{
함수내용
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
이와 같은 방식으로 선언한다.
반환형은 int, void 등의 자료형이고, void는 값이 없음을 표현한다.
이건 굳이 안적어도 된다.
반환의 의미는 함수의 바디에서 코드가 실행된 결과를
어떤 자료형의로 내놓을 지 알려주는 의미 이다.
만약 반환형이 void 이면 함수 마지막에 return 문이 필요가 없어진다.
반환형과 리턴문은 일치해 주어야 한다.
int 형이면 숫자로
char형이면 ''문자로
void면 안쓰고 등등
함수의 이름은 누가봐도 알수 있게 만드는 센스또한 필요하다.
함수이름은 동사+명사로 하는편이 일반적이고 소문자로 시작한다.
단어 구분할때 첫글자말고 대문자로 구분해 줄수 있다.
참고로 함수이름에는 _ 같은 언더바 외에는 특수기호는 사용하지 않는다(오류날 수 있다)
참고로 함수끼리 서로다른 함수를 사용할 수 있다.(분담업무를 하는 개념으로 생각하면 쉽다)
함수에서 매개변수를 선언하고 만드는것과
함수를 사용할때의 매개변수에 오는건 완 전 다 르 다
먼저 전자를 parameter(매개변수) 라 하고 후자는 argument(인수) 라 한다
전자는 임시로 사용되는 그릇으로 나중에 포인터를 할때 좀더 알게 될것이다.
지금은 간단히 argument에 오는 값만 복사해서 parameter에 담아서 사용한다고 생각한다.
다음의 간단한 제곱 예제를 본다
int square(int);
int main()
{
int result;
int x;
printf("제곱할 값:");
scanf("%d",&x);
result = square(x);
printf("제곱한 값=%d",result);
printf("\n");
return 0;
}
int square(int x)
{
return(x*x);
}
결과로
제곱할 값:5
제곱한 값=25
이래 나온다.
다음은 같은 내용을 함수의 반환형을 달리하였다
void square(int);
int main()
{
int x;
printf("제곱할 값:");
scanf("%d",&x);
square(x);
printf("\n");
return 0;
}
void square(int x)
{
printf("제곱한 값=%d",x*x);
}
그 결과
제곱할 값:5
제곱한 값=25
이다.
이와 같이 간단한 차이점을 확실하게 알수 있다.
이를 자신이 직접 헤더파일을 만들어서 사용할수 있다
방법은 다음과 같다.
이 방법은 파일로 분리하여 불러들여서 사용하는 방법이다.
1. 헤더파일에 ~.h를 붙여 하나를 새로 만들고 int square(int); 를 적는다.
2. 소스파일에 내가만든 함수의 바디부분을 붙여넣는다
3. 내가만든 헤더파일을 위에 "여기에 적고" 사용한다(사용자가 만든 헤더파일은 <>대신 " " 여기에 적는다.)
다음을 과 같다
1. 헤더파일에 선언한다
int square(int);
헤더 파일이름은 hanfun.h 이다.
2. 소스파일을 새로 만들어 함수 바디를 붙인다.
소스파일 이름은 hanfun.c 이다
int square(int x)
{
return(x*x);
}
3. 마지막으로 다음과 같이 선언하여 사용한다.
#include //프린트와 스캔에프를 쓰기위해 선언한것
#include "hanfun.h" //내가 만든 함수인 스퀘어를 사용하기위해 선언한것
int main()
{
int result;
int x;
printf("제곱할 값:");
scanf("%d",&x);
result = square(x);
printf("제곱한 값=%d",result);
printf("\n");
return 0;
}
일반적으로 헤더파일은 같은종류의 함수들을 모아둔것 이다.
다음은 팀과제 이다
#include //프린트와 스캔에프를 쓰기위해 선언한것
#define _CRT_SECURE_NO_WARNINGS
void intro(void);
int inputInteger(void);
char inputChar(void);
void outInteger(int);
void outChar(char);
int addFunction(int,int);
int mulFunction(int,int);
int main()
{
int a;
char b;
int x,y;
intro();
a = inputInteger();
outInteger(a);
b=inputChar();
outChar(b);
addFunction(5,7);
addFunction(100,200);
mulFunction(5,7);
mulFunction(100,200);
printf("두수 입력: \n");
x = inputInteger();
y = inputInteger();
addFunction(x,y);
mulFunction(x,y);
printf("\n");
return 0;
}
void intro()
{
printf("학번 : 20191443 \n");
printf("이름 : 박한결 \n");
printf("이 프로그램은 두번째 팀과제 이다. \n");
}
int inputInteger(void)
{
int x;
printf("정수값 입력:");
scanf("%d",&x);
return x;
}
char inputChar(void)
{
char y;
printf("문자값 입력:");
scanf(" %c",&y);
return y;
}
void outInteger(int x)
{
printf("정수값 출력 : %d \n",x);
}
void outChar(char y)
{
printf("문자값 출력 : %c \n",y);
}
int addFunction(int x,int y)
{
int z;
z=x+y;
printf("%d \n",z);
return z;
}
int mulFunction(int x,int y)
{
int z;
z=x*y;
printf("%d \n",z);
return z;
}
이 결과로
학번 : 20191443
이름 : 박한결
이 프로그램은 두번째 팀과제 이다.
정수값 입력:1
정수값 출력 : 1
문자값 입력:a
문자값 출력 : a
12
300
35
20000
두수 입력:
정수값 입력:10
정수값 입력:20
30
200
가 출력된다.
'관 > 솔직한 c 언어 공부' 카테고리의 다른 글
c언어 기초 공부 10.(배열2) (0) | 2019.12.16 |
---|---|
c언어 기초 공부 09.(배열) (0) | 2019.11.12 |
c언어 기초 공부 07. (0) | 2019.11.07 |
c언어 기초 공부 06. (0) | 2019.11.06 |
c언어 기초 공부 05. (0) | 2019.11.05 |
댓글