안녕 후로게이들아.
기쁜 주말이 끝났구나!
주말이 끝났으니 다시 글을 싸야겠지?
오늘은 저번에 쌌던 글 중 후반부에 잠시 언급됬었던, 함수의 호출에 대해 좀 더 자세히 알아볼거야 후로게이들아!
(* 재귀함수와 static변수/함수는 배운 게이는 알다시피 포인터까지의 문법상의 문제만 배울거면 나중에 배워도 큰 문제가 없다. 다른 반복문이나 조건문으로 대체가 가능하
고, 어쭙잖은 사용은 되려 해가 됨. 제일 큰건 내가 귀찮음ㅋ 고로 생략한다. *)
4. 함수
게이놈들아. 혹시 니네가 짜는 코딩에 필히 들어가야 할 함수에 대해 기억은 하고 있지?
ㅇㅇ. 바로 main(가장 큰, 주된 이라는 영단어) 함수야.
없어서는 안됨!
사실 니네가 하는 코딩에 다른 함수들을 아무리 넣어봐도 다른 함수는 무시하고 바로 메인함수로 가서 명령을 실행받고 메인함수에서 끝나버려.
이름값을 하는 새기라서 아무리 함수가 많아도 결국 main함수만 실행되는것이라고 해도 무방함.
main 함수 = 있어야 함!
다른 함수 = 없어도 됨 ^^
실제로 메인 함수를 빼고 코딩을 짜서 실행해 봐. 당장 오류가 날걸?
자. 예습 안한 새끼들을 위해 보여줄게! 메인 함수 와 다른함수를 사이좋게 하나씩 입력하면 어떨까?
예시를 줄게.
#include <stdio.h>
int main()
{
printf("하이하이;;\n");
return 0;
}
void dodo()
{
printf("바이바이;;\n");
}
해당 코딩을 실행해보면 결과는 아래값과 같아.
하이하이;;
|
ㅇㅇ. 봤지?
결과에 그 어떠한 결과도 미치지 못했어.
이렇게 나온 결과는 간단해.
내가 아까 말했지?
메인함수로 시작해서, 메인함수에서 끝이 난다고.
결국에는. 이 찌끄레기 함수들은 디버깅만 체크하고 실행이 되지 않는다는거야.
그렇기에 이런 함수들이 실행될 수 있도록 해주는 것이 '함수의 호출'이야.
4-1 함수의 호출
시발. 세번째 말하는데 메인함수 외의 함수는 메인함수가 불러주질 않으면 실행이 되지 않음.
걍 쓰레기폐기물이라고.
그렇기에 메인 함수에서 " XXX함수 이리로 오라능! " 하고 '호출' 해주어야 "넹! 글루감! 핰핰!"하고 실행이 되기에 함수의 호출이라고 해.
예시를 다시 줄게. 이번엔 조큼 김.
#include <stdio.h>
int main()
{
printf("하이하이;;\n");
dodo2();
return 0;
}
void dodo1()
{
printf("안녕 못함;;\n");
}
void dodo2()
{
printf("바이바이;;\n");
}
void dodo3()
{
printf("ㅗㅗ;;\n");
}
위 코딩을 실행한 결과값은, 한번 추리를 해 보자.
일단 메인 함수를 봐봐.
int main()
{
printf("하이하이;;\n");
dodo2();
return 0;
}
메인함수에서 시작을 한다고 했으니, 그대로 따라가 읽어 보자.
printf("하이하이;;\n");
하이하이;; 라는 글을 출력하고, 한 줄 띄우겠지?
dodo2();
* 이번 주제인 함수의 호출이 드디어 나왔네. dodo2라는 함수를 호출하고 있어. *
dodo2를 호출해 보자.
void dodo2()
{
printf("바이바이;;\n");
}
간단하지?
printf("바이바이;;\n");
바이바이;; 라는 글을 출력하고, 한 줄 띄웠어.
그리고 dodo2를 탈출!
다시 dodo2를 호출했던 메인함수로 돌아가서 그 뒷부분부터 이어져.
return 0;
리턴값은 0이라던가, 값을 반환하지 않는다던가, 함수를 탈출한다던가 마음대로 읽어도 돼.
이후 메인함수 또한 탈출하며 프로그램이 종료!
메인 함수에서 시작되어 메인 함수를 탈출함으로써 끝이 났어.
또한 호출을 받은 dodo2 외에는 실행 한번 못받아보고 묻히게 되었지.
결론적으로 출력된 값은 이래.
하이하이;;
바이바이;;
|
알겠징?
위의 예시와 같이, 함수를 호출할때는
*함수명(); 을 입력해주어야 해.
*이렇게 호출하지 않으면 함수가 호출이 되지 않고 그대로 끝나고.
*메인 함수에서 시작하여, 메인 함수에서 끝이 난다는걸 기억해야 함.
4-2 함수의 반환
그런데 말야. 너희 혹시 함수 앞과 뒤에 입력되는 int와 ()에 대해 궁굼하지 않아?
int main()
void dodo()
이런 함수들 앞뒤처럼 말야.
이는, 함수가 어떠한 값을 반환하고, 어떠한 값을 반환 받을 수 있는지를 뜻해.
설명해줄게.
int main()을 읽어 볼게.
함수 main는 int형 변수를 반환할 수 있다.
void dodo()를 읽어 볼게.
함수 dodo는 변수를 반환할 수 없다.
조금 바꾸어 char dodo()를 읽어 볼게.
함수 dodo는 char형 변수를 반환할 수 있다.
이해했지?
*앞에 오는 int, char 등의 형태가 바로 그 함수가 반환할 수 있는 변수의 형태를 뜻해. *
void는 비어있다는 뜻이니 반환할 수 있는 변수가 없다는 소리야.
뒤에 오는 () 또한 void와 같은 뜻을 나타내지만, 함수 뒤에 붙은 것은 반환받을 수 있는 함수의 형태를 뜻해.
이번에는 뒤 ()부분 까지 모두 읽어볼게.
int main()을 다시 읽어 볼게.
함수 main는 int형 변수를 반환할 수 있으며, 반환 받을 수 있는 함수는 없다.
뒤에 int a를 추가한 void dodo(int a)를 다시 읽어 볼게.
함수 dodo는 변수를 반환할 수 없으며, int형 변수 a를 반환 받을 수 있다.
char dodo()를 다시 읽어 볼게.
함수 dodo는 char형 변수를 반환할 수 있으며, 반환 받을 수 있는 함수는 없다.
이제 멍청하기 짝이 없는 게이들도 이해했을 거야.
(반환할 수 있는 형태) 함수명(반환받을 수 있는 형태와 변수)
라는거 ㅇㅇ.
그럼 빠르게 실습으로 가서 사용되는 형태에 빨리 익숙해지자! 후로게이들아!!
일단, 메인 함수부터 빠르게 작성하자.
#include <stdio.h>
int main()
{
}
다른 함수는 int형 값을 반환할 수 있는 ww라고 하자.
include <stdio.h>
int main()
{
}
int ww()
{
}
ww 함수는 int형 a와 b를 반환 받게 될거야!
include <stdio.h>
int main()
{
}
int ww(int a, int b)
{
}
자. 여기서부턴 단디 보아라 후로게이들아.
안 그러면 어렵게 느껴진단다!
일단 main함수부터!
int형 변수 z를 선언하자.
int main()
{
int z;
}
z의 값은 2+3으로 하도록 하자.
int main()
{
int z=2+3
}
여기서, 우리가 배우는건 '함수의 반환'이야.
그러므로 계산은 ww 함수에게 맡기도록 해볼까?
int main()
{
int z=ww(2,3)
}
이는 무슨 뜻이냐면, 위의 ww함수를 선언할 당시 이렇게 했었지?
int ww(int a, int b)
내가 가르쳐 준 대로 읽어봐봐. 그렇다면 이렇게 될거야.
함수 ww는 int형 변수를 반환할 수 있으며, int형 변수 a와 b를 반환 받을 수 있다.
지금이 저 굵은 글씨의 단계야.
ww에게 int a=2 와 int b=3를 건내주는 거라고.
이제 ww함수를 들어가 보자.
int ww(int a, int b)
{
}
텅 비어 있는것 같지만 사실 a와 b 값을 받았으니 { } 사이에
int a=2, int b=3 이 숨어있다고 보면 돼.
그러므로 이 둘을 x라는 변수를 선언하여 더해보자.
int ww(int a, int b)
{
int x=a+b;
}
int x=2+3이므로, x 안에는 5가 들어가게 되었어.
이제 이 결과값을 다시 2와 3을 받아온 곳으로 넘겨 주어야 겠지?
이럴 때 사용하는 것이 바로 니네가 매일 보던 return 이야.
int ww(int a, int b)
{
int x=a+b;
return x;
}
이렇게 하면 x가 가지고 있던 5라는 숫자가 다시 왔던 곳(main함수)로 돌아가는거지.
int main()
{
int z=ww(2,3) <--- ww에서 2+3을 더하여 5를 주었으므로 int z는 5가 되었어.
}
이제 정말로 z이 5가 되었는지 확인을 위해 한번 출력을 해봐야 겠지?
int main()
{
int z=ww(2,3);
printf("z의 값은 %d",z);
}
마지막으로, 함수가 종료될 수 있게 return 0;를 넣어주자.
int main()
{
int z=ww(2,3)
printf("z의 값은 %d",z);
return 0;
}
물론, 여기서 끝낸다면 우리가 보기로 한 z의 값이 출력되자 마자 종료가 되서 보기도 존나 힘들겠지?
getchar();도 넣어주세여;
int main()
{
int z=ww(2,3)
printf("z의 값은 %d",z);
getchar();
return 0;
}
완성된 코딩 -
#include <stdio.h> // 1.헤더파일의 선언
int main() // 2.정수형 변수를 반환할 수 있는 메인함수의 선언
{
int z=ww(2,3); // 3.함수 ww에게 2,3이라는 정수형 변수값을 넘겨줌 , 7. 반환받은 변수 x가 ww(2,3)자리에 대신 들어가게 되어 z=x;가 됨.
printf("z의 값은 %d",z); // 8. z의 값을 출력
getchar(); // 9. 사용자에게 한개의 문자를 입력받음.
return 0; // 10. 종료
}
int ww(int a, int b) //4. 정수형 변수를 반환할 수 있고, 정수형 변수 a,b를 받을 수 있는 ww함수의 선언 (a,b는 3. 에서 받아온 2,3이 차례차례 들어간다.)
{
int x=a+b; // 5.정수형 변수 x는 a+b. 즉 2+3.
return x; // 6. 2+3을 계산하여 초기화 한 변수 x를 반환!
}
결과 값 -
z의 값은 5
이런 과정을 세줄로 요약하면 이래.
int z는 ww 함수에게 1,2를 건낸다.
ww 함수는 1과 2를 더한다.
ww 함수는 더한 값을 다시 int z에게 준다.
만약, 어렵게 느껴진다면. 방법은 간단함.
함수의 반환 설명 초반에
void dodo(int a)
함수 dodo는 변수를 반환할 수 없으며, int형 변수 a를 반환 받을 수 있다.
이런 식으로 적어놨었지?
이렇게 함수를 보고 읽어보기도 하고, 직접 해보며 코딩연습을 하면 된단다.
이제 꺼져
- 01/01 어떤 후로게이가 보기 힘들다고 새해 기념으로 그래도 보기 괜찮게 수정해봤음. 니네도 휴일인건 알지? 고로 존나 쉴거임
양이연구박사
하지만 너의 끈기에 ㅊㅊ은 줌
StudyOfIT
한 사람 수준에만 맞춰서 설명해주는게 훨씬 편하거든.
또, 사람마다 말로 풀어서 문법적으로 설명해 주어야 편한 사람도 있고.
수학적으로 설명해 주어야 아하! 하고 이해하는 사람도 있음
개소주는소주소주해
잘은 모르겠지만 main함수 하나에서 선언이랑 계산을 다 하는것보다
저렇게 다른 곳으로 옮겨서 하는게 쉬운경우가 있으니까
이걸하는거겟지??
ㅊㅊ함
StudyOfIT
한 곳에 뭉텅이로 뭉쳐두면 찾아서 수정하기 곤란함
개소주는소주소주해
빠른 수정은 빠른 업뎃의 원동력
잉텔
StudyOfIT
잉텔
근데 뭘 써야하지? 컴퓨터 구조는 아직 안배웠으...
StudyOfIT
로컬
StudyOfIT
숫자키
근데 main(void)도 쓰는거같은데
이거 두개 차이점!!!!!!
StudyOfIT
void가 숨어있는거임
main void랑 void main()이랑 void main (void)랑 다 같음
숫자키
하 나랑 결혼하자!
StudyOfIT
숫자키
StudyOfIT
ㅈㅅ
숫자키
StudyOfIT
나까지 끼면 홀수라서 안됨
숫자키
StudyOfIT
이혼만 해도 돈이 얼마야 한명당 따져도 어마어마함
단 기어
C나 C++은 잡은지 오래되서 설명하다 틀릴거같아 엄두도 못내고있었는데
StudyOfIT
다 중간에 귀찮아서 그만둠
루니오스
루니오스
StudyOfIT