연재 완료/C Lang 이론

C언어 이론 7. 함수 (재귀함수와 main함수)

라이피 (Lypi) 2018. 5. 17. 17:51
반응형

내용 출처 : YES C (정보공학연구소 /생능출판사)

                  혼자 연구하는 C/C++ (SoEn.kr /와우북스)



Ⅰ. 재귀함수 (recurcive function)

   ① 함수 내에서 자기 자신을 호출하는 함수.

   ② 재귀 함수는 함수 내에서 사용하는 변수가 지역변수여야 하고, 값에 의한 전달 방식을 사용해야한다.

   ③ 재귀 호출은 지역 변수를 사용하므로 저장영역으로 스택을 사용하고 호출되어진 횟수만큼 기억장소가 배정되므로 스택 오버플로우를 주의해야한다. 

   ④ 재귀 호출은 다른 방식에 비해 처리속도가 느리고, 기억장소를 많이 사용하기 때문에 자주 쓸 기법은 아니다.

   ⑤ 정렬 트리나 리스트 등의 자료구조를 다룰 때 주로 사용한다.



Ⅱ. main() 함수의 원형

   ① 메인함수의 가장 완전한 원형은 void(또는 int) main(int argc,char *argv[],char *env[]); 이다.

   ② 3개의 인수는 뒤에서부터 생략가능하므로 main함수가 가질 수 있는 원형은 총 8가지가 된다.


ⅰ. main() 함수의 리턴값

   ① 메인함수의 리턴값은 없거나(void) 정수형(int)이어야 한다.

   ② 표준문서에서는 메인함수의 리턴값을 정수로 권장하고 있지만 강요하고 있지는 않다.

   ③ 메인함수가 리턴하는 값을 탈출코드(Exit code)라고 하며 프로그램이 운영체제로 리턴하는 값을 의미한다.

   ④ 32비트 이상의 환경에서는 탈출코드 외에도 응용프로그램 간의 통신을 위한 장치가 많으므로 요즘에는 거의 사용되지 않는다.

   ⑤ 메인함수를 int main()이라 썼다면 main함수의 마지막에 return 문이 있어야 하는게 원칙이다.

   ⑥ 하지만 표준에서 메인함수가 리턴값을 생략하는 것을 인정하고 있으므로 int main()에 return문이 없을 경우에도 컴파일러는 경고로 처리할 뿐이다.

   ⑦ 다른 함수의 경우에는 이를 에러로 처리하는 것과 비교하면 main함수는 특수하게 취급된다는 것을 알 수 있다.


ⅱ. int argc

   ① main함수에 전달된 인수의 개수로 뒤에 전달될 argv값의 개수를 갖는다.

   ② argv[0]은 항상 실행 프로그램의 경로명을 포함한 프로그램명이 저장되므로 argc도 항상 1보다는 크다.

   ③ 이 값은 인수를 필요로 하는 프로그램에서 인수가 제대로 전달되었는지를 검사하는 용도로 쓰인다.


ⅲ. char* argv[]

   ① 몇개의 문자열이 전달될지 알수 없으므로 배열에 대한 포인터로 지정되어 있다. 즉 argv는 이중포인터 변수이다.

   ② 프로그램으로 전달된 실제 인수값으로 argv[0]이 경로명을 포함한 실행된 프로그램명을 갖으므로 argv[1]부터 실질적으로 전달된 매개변수이다.


ⅳ.  char* env[]

   ① 운영체제의 환경변수를 알려준다. 

   ② 응용 프로그램에게 자신이 실행되는 환경을 알 수 있도록 해 준다는 의도로 전달되는 인수이다.

   ③ 하지만  이 인수가 아니더라도 환경 변수를 조사할 수 있는 다른 방법이 있기 때문에 실질적으로 사용되지 않는다.



Ⅲ. Visual Studio에서 main함수에 매개변수를 전달하는 방법

    ⅰ. 출처 : http://blog.naver.com/sharonichoya/220501242693

    ⅱ. 기준은 주인장이 사용하는 vs 2017.


        ① 코드를 치는 곳 좌측의 솔루션 탐색기를 찾자. 없으면 보기 메뉴에서 솔루션 탐색기를 누르거나 단축키 ctrl+alt+L를 누르자.

         ① 코드를 치는 곳 좌측의 솔루션 탐색기를 찾자. 없으면 보기에서 솔루션 탐색기를 누르거나 단축키 ctrl+alt+L를 누르자.


       ② 설정한 솔루션 이름을 우클릭하면 아래와 같은 메뉴가 나온다. 맨 밑의 속성을 누르자.

        


      ③ 그러면 이런 속성 페이지가 나온다. 왼쪽 메뉴의 디버깅을 누르자.

        


      ④ 그 뒤 우측의 매개변수 항목에 원하는 값을 적으면 된다. 아무것도 안 적혀있을텐데 스샷에는 표시를 위해 Here이라고 적어뒀다.

      



반응형