내용 출처 : 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이라고 적어뒀다.