main의 두 번째 프로토타입은 argv(커맨드 라인 인수 벡터)라는 특별한 기능을 제공한다. 앞의 예제를 보면 이 벡터를 이용하여 커맨드 라인에서 프로그램으로 값을 전달했다. 예를 들어 예제 3-1에서 argv를 통해 double 타입 데이터를 프로그램으로 전달했다.
▲ 그림 7-1 argv의 구조
이처럼 i = 0, …, argc에 대해 argv[i]는 앞에서 소개한 포인터와 비슷하다. 쉽게 표현하면 스트링이라 볼 수 있다.
TAKEAWAY 7.10 커맨드 라인 인수는 모두 스트링으로 변환할 수 있다.
해석하는 방법은 프로그래머 마음이다. 예제 3-1에서는 스트링으로 저장된 값을 strtod 함수를 통해 double 값으로 해석했다.
argv 스트링 중에서도 두 원소는 다음과 같이 특수한 값을 갖고 있다.
TAKEAWAY 7.11 main에 전달된 인수 중 argv[0]은 프로그램 이름을 담고 있다.
프로그램 이름에 대한 규칙은 따로 정해져 있지 않지만 대체로 실행 파일 이름을 사용한다.
TAKEAWAY 7.12 main에 전달된 인수 중 argv[argc]는 0이다.
argv 배열에서 이 속성을 이용하면 마지막 인수를 알아낼 수 있지만 그리 유용한 기능은 아니다. argc만으로도 이 배열을 충분히 다룰 수 있다.