과학

조루년들아 몇개만 찍싸고 도망가냐 -4- (프로그래밍, C언어)

   안녕 후로게이들아.

 

   기쁜 주말이 끝났구나!

 

   주말이 끝났으니 다시 글을 싸야겠지?

 

   오늘은 저번에 쌌던 글 중 후반부에 잠시 언급됬었던, 함수의 호출에 대해 좀 더 자세히 알아볼거야 후로게이들아!

   (* 재귀함수와 static변수/함수는 배운 게이는 알다시피 포인터까지의 문법상의 문제만 배울거면 나중에 배워도 큰 문제가 없다. 다른 반복문이나 조건문으로 대체가 가능하

   고,    어쭙잖은 사용은 되려 해가 됨. 제일 큰건 내가 귀찮음ㅋ 고로 생략한다. *)

 

4. 함수

                                

 

   게이놈들아. 혹시 니네가 짜는 코딩에 필히 들어가야 할 함수에 대해 기억은 하고 있지?

 

   ㅇㅇ. 바로 main(가장 큰, 주된 이라는 영단어) 함수야.

 

   없어서는 안됨! 

   사실 니네가 하는 코딩에 다른 함수들을 아무리 넣어봐도 다른 함수는 무시하고 바로 메인함수로 가서 명령을 실행받고 메인함수에서 끝나버려.

   이름값을 하는 새기라서 아무리 함수가 많아도 결국 main함수만 실행되는것이라고 해도 무방함.

 

   main 함수 = 있어야 함!

   다른 함수 = 없어도 됨 ^^

 

   실제로 메인 함수를 빼고 코딩을 짜서 실행해 봐. 당장 오류가 날걸?

 

 

 

   자. 예습 안한 새끼들을 위해 보여줄게! 메인 함수 와 다른함수를 사이좋게 하나씩 입력하면 어떨까?

 

   예시를 줄게.

 

 

 

 

                    #include <stdio.h>

                    int main()
                    {
                                        printf("하이하이;;\n");
                                        return 0;
                    }


                    void dodo()
                    {
                                        printf("바이바이;;\n");
                    }

 

 

   해당 코딩을 실행해보면 결과는 아래값과 같아.

 

1
하이하이;;

 

   ㅇㅇ. 봤지?

 

   결과에 그 어떠한 결과도 미치지 못했어.

 

   이렇게 나온 결과는 간단해.

   내가 아까 말했지?

 

   메인함수로 시작해서, 메인함수에서 끝이 난다고.

 

   결국에는. 이 찌끄레기 함수들은 디버깅만 체크하고 실행이 되지 않는다는거야.

 

   그렇기에 이런 함수들이 실행될 수 있도록 해주는 것이 '함수의 호출'이야.

 

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 외에는 실행 한번 못받아보고 묻히게 되었지.

 

                                 결론적으로 출력된 값은 이래.

 

1
2
하이하이;;
바이바이;;

 

                                 알겠징?

 

   위의 예시와 같이, 함수를 호출할때는

 

            *함수명();  을 입력해주어야 해.

 

            *이렇게 호출하지 않으면 함수가 호출이 되지 않고 그대로 끝나고.

 

            *메인 함수에서 시작하여, 메인 함수에서 끝이 난다는걸 기억해야 함.

 

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 어떤 후로게이가 보기 힘들다고 새해 기념으로 그래도 보기 괜찮게 수정해봤음. 니네도 휴일인건 알지? 고로 존나 쉴거임

 

 

26개의 댓글

2013.12.30
전부터 너무 어려워서 난 포기함
하지만 너의 끈기에 ㅊㅊ은 줌
0
2013.12.30
@양이연구박사
그래서 일대일강의가 대세라는거야.
한 사람 수준에만 맞춰서 설명해주는게 훨씬 편하거든.

또, 사람마다 말로 풀어서 문법적으로 설명해 주어야 편한 사람도 있고.
수학적으로 설명해 주어야 아하! 하고 이해하는 사람도 있음
0
야 설명잘했다.
잘은 모르겠지만 main함수 하나에서 선언이랑 계산을 다 하는것보다
저렇게 다른 곳으로 옮겨서 하는게 쉬운경우가 있으니까
이걸하는거겟지??
ㅊㅊ함
0
2013.12.30
@개소주는소주소주해
각 함수의 역활을 분담해놓아야 나중에 수정할때 편하니까.
한 곳에 뭉텅이로 뭉쳐두면 찾아서 수정하기 곤란함
0
@StudyOfIT
오 ㅇㅋㅇㅋ
빠른 수정은 빠른 업뎃의 원동력
0
2013.12.30
존나 재밌게 잘써서 ㅊㅊ ㅋㅋㅋ
0
2013.12.30
@잉텔
어서 컴퓨터의 구조에 대해 글을 싸거라
0
2013.12.30
@StudyOfIT
우선 오버로딩 남은거랑 객체지향 쓰고...
근데 뭘 써야하지? 컴퓨터 구조는 아직 안배웠으...
0
2013.12.30
@잉텔
너도 컴퓨터의 구조 배우면서 진도따라서 글싸면 될듯 공부잘댈듯 ㅇㅇ
0
2013.12.30
요즘 C언어관련글 많이 올라오네 ㅊㅊ
0
2013.12.30
@로컬
넌 네트워크글 싸면 될듯 닉이 어울린다
0
2013.12.30
형아 기본 C언어 배울때 void main() 이렇게쓰잖아
근데 main(void)도 쓰는거같은데
이거 두개 차이점!!!!!!
0
2013.12.30
@숫자키
앞에 생략한거나 뒤에 () 안에 아무것도 없는거나

void가 숨어있는거임

main void랑 void main()이랑 void main (void)랑 다 같음
0
2013.12.30
@StudyOfIT
이형 존나친절해
하 나랑 결혼하자!
0
2013.12.30
@숫자키
저 남편 100명 다차서 안됨 ㅈㅅ
0
2013.12.30
@StudyOfIT
헐 본처만 잡으면 되는거지?????
0
2013.12.30
@숫자키
본처 100명 다참 첩 3000명 다참

ㅈㅅ
0
2013.12.30
@StudyOfIT
하...존나 정력왕....하루에 한명씩 사랑을 나눠도 10년이야 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 아 생각해보니 웃겨 ㅋㅋㅋㅋㅋㅋㅋㅋ
0
2013.12.30
@숫자키
왜? 본처랑 첩끼리 서로 쎾쓰! 하면 되잖아
나까지 끼면 홀수라서 안됨
0
2013.12.30
@StudyOfIT
?! 역시 배운사람은 다르구나....
0
2013.12.30
@숫자키
너도 삼천명 정도랑 결혼해봐
이혼만 해도 돈이 얼마야 한명당 따져도 어마어마함
0
2013.12.30
자바관련글 올라온적 있나?
C나 C++은 잡은지 오래되서 설명하다 틀릴거같아 엄두도 못내고있었는데
0
2013.12.30
@단 기어
자바나 php는 싸도 될거야. 프로그래밍 관련 글은 장기적으로 싼 애는 단 한명도 없었다.
다 중간에 귀찮아서 그만둠
0
2013.12.31
[삭제 되었습니다]
2013.12.31
@루니오스
[삭제 되었습니다]
2014.01.01
@루니오스
됐는가 후로게이여.
0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜
563 [과학] 경계선 지능이 700만 있다는 기사들에 대해 34 LinkedList 12 21 일 전
562 [과학] 번역)새들은 왜 알을 많이 낳는가? - 후투티의 형제살해 습성... 7 리보솜 3 2024.03.23
561 [과학] 학계와 AI, 그리고 Bitter Lesson (쓰라린 교훈) 26 elomn 35 2024.02.17
560 [과학] 지구의 속삭임, 골든 레코드의 우주 9 Archaea 10 2024.02.16
559 [과학] 잔혹한 과학실험 이야기 <1> 절망의 구덩이 19 개드립하면안됨 37 2024.02.15
558 [과학] 스트레스를 받으면 술이 땡기는 이유 12 동식 16 2024.02.10
557 [과학] 지능은 모계유전이 아니다. 40 울릉특별자치도 35 2024.01.26
556 [과학] 진화를 생각할 때 고려할 것들 23 날씨가나쁘잖아 12 2024.01.17
555 [과학] 학문적(과학적) 접근과 유사 진화심리"학" 26 날씨가나쁘잖아 19 2024.01.15
554 [과학] 호모 사피엔스의 야릇한 은폐된 배란에 대한 남녀 학자의 다... 14 개드립하면안됨 15 2023.12.29
553 [과학] 김영하의 작별인사를 읽고 느낀 점 (스포있음) 21 장문주의 2 2023.11.28
552 [과학] 제4회 포스텍 SF 어워드 공모전 ( SF 단편소설 / SF 미니픽션 ) 2 따스땅 1 2023.11.25
551 [과학] 펌) CRISPR 유전자 가위 치료제 "최초" 승인 12 리보솜 7 2023.11.25
550 [과학] 러시아는 기술산업을 어떻게 파괴시켰는가(펌) 9 세기노비는역사비... 15 2023.11.18
549 [과학] 고양이에 의한 섬생태계 교란과 생물 종의 절멸 (펌) 2 힘들힘들고 6 2023.11.16
548 [과학] 번역) 알츠하이머병 유전자는 어떻게 살아남았는가? 12 리보솜 10 2023.11.15
547 [과학] 『우영우』의 자폐 스펙트럼 장애 개념이 왜곡인 이유 (펌) 47 힘들힘들고 10 2023.11.12
546 [과학] 흑수저 문과충 출신 구글 취직하는 파이썬 특강 -1 14 지방흡입기 11 2023.09.27
545 [과학] 국가별 당뇨 유병율 이거 뭐가 바뀐건지 아는사람? 8 LAMBDA 1 2023.09.27
544 [과학] 물샤워 ㅇㅈㄹ 하는 놈들 봐라 171 철동이 48 2023.09.23